用另一列中的值替换缺失值
Replace missing values with a value from another column
如果我有:
s <- data.frame(ID=c(191, 282, 202, 210), Group=c("", "A", "", "B"), stringsAsFactors=FALSE)
s
ID Group
1 191
2 282 A
3 202
4 210 B
我可以像这样用 N 替换空单元格:
ds$Group[ds$Group==""]<-"N"
s
ID Group
1 191 N
2 282 A
3 202 N
4 210 B
但我需要用另一列中的值替换空单元格。我怎样才能做到这一点?:
s
ID Group Group2
1 191 D D
2 282 A G
3 202 G G
4 210 B D
ifelse(test, yes, no)
是一个方便的函数,它可以用于向量。使用你最后的 data.frame:
s <- data.frame(ID = c(191, 282, 202, 210),
Group = c("", "A", "", "B"),
Group2 = c("D", "G", "G", "D"))
s$Group <- ifelse(test = s$Group != "", yes = s$Group, no = s$Group2)
第一个参数是测试。对于向量中的每个值,如果 test
为真,则它将取 yes
中的值,否则将取 no
.
中的值
我们可以使用data.table
将"Group2"中的值赋给"Group",其中"Group"是"i"中指定的""
条件。
library(data.table)
setDT(s)[Group=="", Group:= Group2]
由于分配发生在适当的地方,因此被认为是有效的。
如果我有:
s <- data.frame(ID=c(191, 282, 202, 210), Group=c("", "A", "", "B"), stringsAsFactors=FALSE)
s
ID Group
1 191
2 282 A
3 202
4 210 B
我可以像这样用 N 替换空单元格:
ds$Group[ds$Group==""]<-"N"
s
ID Group
1 191 N
2 282 A
3 202 N
4 210 B
但我需要用另一列中的值替换空单元格。我怎样才能做到这一点?:
s
ID Group Group2
1 191 D D
2 282 A G
3 202 G G
4 210 B D
ifelse(test, yes, no)
是一个方便的函数,它可以用于向量。使用你最后的 data.frame:
s <- data.frame(ID = c(191, 282, 202, 210),
Group = c("", "A", "", "B"),
Group2 = c("D", "G", "G", "D"))
s$Group <- ifelse(test = s$Group != "", yes = s$Group, no = s$Group2)
第一个参数是测试。对于向量中的每个值,如果 test
为真,则它将取 yes
中的值,否则将取 no
.
我们可以使用data.table
将"Group2"中的值赋给"Group",其中"Group"是"i"中指定的""
条件。
library(data.table)
setDT(s)[Group=="", Group:= Group2]
由于分配发生在适当的地方,因此被认为是有效的。