【发布时间】:2021-01-22 11:24:42
【问题描述】:
您好,我有一个数据框,例如
COL1 COL2 COL3
A nan NaN
B ET1 Carnivora
C ET1 NaN
D ET2 Fish
E OK Aves
F ET3 NaN
我有一个列表
List_ET<-c("ET1","ET2","ET3","nan")
如果相应的df$COL2 存在于该列表中,我想用Unknown 替换所有df$COL3 值,但如果df$COL3 不是NaN,我什么也不做。
比我应该得到的:
COL1 COL2 COL3
A nan Unknown
B ET1 Carnivora
C ET1 Unknown
D ET2 Fish
E OK Aves
F ET3 Unknown
这是数据框
structure(list(COL1 = structure(1:6, .Label = c("A", "B", "C",
"D", "E", "F"), class = "factor"), COL2 = structure(c(4L, 1L,
1L, 2L, 5L, 3L), .Label = c("ET1", "ET2", "ET3", "nan", "OK"), class = "factor"),
COL3 = structure(c(4L, 2L, 4L, 3L, 1L, 4L), .Label = c("Aves",
"Carnivora", "Fish", "NaN"), class = "factor")), class = "data.frame", row.names = c(NA,
-6L))
到目前为止我尝试过
df$COL3[df$COL2 %in% List_ET]<- "Unknown"
但不包括当df$COL3不是NaN时什么都不做
【问题讨论】:
-
我想用:
df$COL3[df$COL2 %in% List_ET & !is.na(df$COL3)]<- "Unknown",但它似乎不起作用 -
在您提供的数据中 COL3 没有 NA。 “NaN”是您数据中的一个字符。
-
另外,你写的东西不能正常工作,因为COL2和COL3都是因子而不是字符
-
是的,我知道,这就是我需要解决方案的原因
-
由于您使用的是因子,因此您必须先修改级别。请参阅建议的答案。希望对你有帮助
标签: r dataframe dplyr refactoring factors