我使用以下命令从R导出数据:
write.table(output,file = "data.raw", na "-9999", sep = "\t", row.names = FALSE, col.names = FALSE)
它正确地导出了我的数据,但是它将所有逻辑变量导出为TRUE
和FALSE
。
我需要将数据读入另一个只能处理数值的程序。有没有一种有效的方法可以在导出过程中将logical
列转换为数值1和0?我有大量的数值变量,所以我希望自动循环数据中的所有变量。table
或者,我的输出对象是一个data.table
,有没有一种有效的方法可以将data.table
中的所有逻辑变量转换为数值变量?
如果有帮助的话,这里有一些代码可以生成一个包含逻辑变量的data.table
(逻辑变量的数量并不多,但足以在示例代码中使用):
DT = data.table(cbind(1:100, rnorm(100) > 0)
DT[ , V3:= V2 == 1 ]
DT[ , V4:= V2 != 1 ]
7条答案
按热度按时间iszxjhcz1#
对于data.frame,您可以使用以下命令将所有逻辑列转换为数值:
在
data.table
语法中:nkoocmlb2#
最简单的方法做这个!
将矩阵乘以1
例如:
(You也可以加零:x1月1x)
xt0899hw3#
不如就一个:
或者另一种方法是使用
dplyr
,以便在数据导入R的情况下(没有人知道)保留前一列。编辑:循环
我不知道我的代码在这里执行,但它检查所有列,并更改为数字只有那些是逻辑.当然,如果你的
TRUE
和FALSE
不是逻辑,但字符串(这可能是远程)我的代码将无法工作.bybem2ql4#
如果有多列,可以使用
set
(使用@josilber的示例)rqenqsqc5#
对于Ted Harding pointed out in the R-help mailing list,将逻辑对象转换为数值的一个简单方法是对它们执行算术运算,方便的方法是
* 1
和+ 0
,它们将保持TRUE/FALSE == 1/0范例。对于您的模拟数据(我对代码做了一些修改,以使用常规的R包并减少大小):
您得到的数据集混合了数值和布尔变量:
现在让
(If您的数据集包含字符或因子变量,您需要将此操作应用于
df
的子集,以过滤掉这些变量)df2
等于这是100%的数字,
str(df2)
将向您显示。现在您可以安全地将
df2
导出到其他程序。bvn4nwqk6#
单线解决方案
使用下面的代码,我们获取所有逻辑列,并将它们转换为数字。
gj3fmq9x7#
与@saebod相同,但使用普通烟斗。