我使用以下命令从R导出数据:

write.table(output,file = "data.raw", na "-9999", sep = "\t", row.names = FALSE, col.names = FALSE)

它正确地导出我的数据,但它将所有逻辑变量导出为TRUEFALSE.

我需要将数据读入另一个只能处理数值的程序.在导出过程中,有没有有效的方法将logical列转换为数字1和0?我有大量的数值变量,所以我希望能自动循环数据中的所有变量.桌子

或者,我的输出对象是data.table.有没有有效的方法将data.table中的所有逻辑变量转换为数字变量?

如果有帮助的话,这里有一些代码可以生成一个data.table,其中包含一个逻辑变量(这不是大量的逻辑变量,但足以用于示例代码):

DT = data.table(cbind(1:100, rnorm(100) > 0)
DT[ , V3:= V2 == 1 ]
DT[ , V4:= V2 != 1 ]

推荐答案

对于一个数据.框架中,可以使用以下命令将所有逻辑列转换为数字:

# The data
set.seed(144)
dat <- data.frame(V1=1:100,V2=rnorm(100)>0)
dat$V3 <- dat$V2 == 1
head(dat)
#   V1    V2    V3
# 1  1 FALSE FALSE
# 2  2  TRUE  TRUE
# 3  3 FALSE FALSE
# 4  4 FALSE FALSE
# 5  5 FALSE FALSE
# 6  6  TRUE  TRUE

# Convert all to numeric
cols <- sapply(dat, is.logical)
dat[,cols] <- lapply(dat[,cols], as.numeric)
head(dat)
#   V1 V2 V3
# 1  1  0  0
# 2  2  1  1
# 3  3  0  0
# 4  4  0  0
# 5  5  0  0
# 6  6  1  1

data.table种语法:

# Data
set.seed(144)
DT = data.table(cbind(1:100,rnorm(100)>0))
DT[,V3 := V2 == 1]
DT[,V4 := FALSE]
head(DT)
#    V1 V2    V3    V4
# 1:  1  0 FALSE FALSE
# 2:  2  1  TRUE FALSE
# 3:  3  0 FALSE FALSE
# 4:  4  0 FALSE FALSE
# 5:  5  0 FALSE FALSE
# 6:  6  1  TRUE FALSE

# Converting
(to.replace <- names(which(sapply(DT, is.logical))))
# [1] "V3" "V4"
for (var in to.replace) DT[, (var):= as.numeric(get(var))]
head(DT)
#    V1 V2 V3 V4
# 1:  1  0  0  0
# 2:  2  1  1  0
# 3:  3  0  0  0
# 4:  4  0  0  0
# 5:  5  0  0  0
# 6:  6  1  1  0

R相关问答推荐

计算转换的次数

在R中,如何创建时间间隔的图表?

在边界外添加注释或标题

使用ggplot 2根据R中的类别排列Likert比例gplot

x[[1]]中的错误:脚注越界

任意列的欧几里得距离

多个过滤器内的一个盒子在仪表板Quarto

将小数分隔符放在R中的前两位数字之后

线性模型斜率在减少原始数据时提供NA

将重复项转换为NA

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

条形图顶部与其错误条形图不对齐

将多个列值转换为二进制

在R中创建连续的期间

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

如何移动点以使它们的打印不重叠

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

GOGPLATE geom_boxploy色彩疯狂

将美学添加到ggploy中的文本标签

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用