我有一个数据框,其中包含逗号分隔值的因子。我抱歉没有提供可重复的示例,但我的数据最终看起来像这样:
Col_1 Col_2 Col_3
1 0 0
0 0 1
2 0 0
1 2,2 2
3 0 1,2
因为我有这些以逗号分隔的值,所以我还没有能够写出一个快速的括号表示方法,R很棒。所以我不得不编写一个for循环来遍历我的数据帧并将所有非零条目更改为1。
for( i in seq(1:nrow(DF))){
if(DF$Col_2 ==0){
DF$NewCol[i] == 0}
else {
DF$NewCol[i] == 1}
上述工作,但需要太长时间。有没有办法在R中使用不同的方法加快速度?
答案 0 :(得分:3)
试试这个:
DF <- read.table(text="Col_1 Col_2 Col_3
1 0 0
0 0 1
2 0 0
1 2,2 2
3 0 1,2", header=TRUE, stringsAsFactors=FALSE)
DF$NewCol <-ifelse(DF$Col_2 ==0,0,1)
> DF
Col_1 Col_2 Col_3 NewCol
1 1 0 0 0
2 0 0 1 0
3 2 0 0 0
4 1 2,2 2 1
5 3 0 1,2 0
答案 1 :(得分:2)
如何简单地
DF$NewCol <- as.integer(DF$Col_2 != "0")
给出了
Col_1 Col_2 Col_3 NewCol 1 1 0 0 0 2 0 0 1 0 3 2 0 0 0 4 1 2,2 2 1 5 3 0 1,2 0
并且比使用ifelse()
生成二进制结果更有效。
数据:
DF <- structure(list(Col_1 = c(1L, 0L, 2L, 1L, 3L), Col_2 = structure(c(1L,
1L, 1L, 2L, 1L), .Label = c("0", "2,2"), class = "factor"), Col_3 = structure(c(1L,
2L, 1L, 4L, 3L), .Label = c("0", "1", "1,2", "2"), class = "factor")), .Names = c("Col_1",
"Col_2", "Col_3"), row.names = c(NA, -5L), class = "data.frame")