R 使用一列覆盖另一列,在NA时采用另一列值
我的系统是R3.5.1和Rstudio 1.1.463 在我的数据框R 使用一列覆盖另一列,在NA时采用另一列值,r,R,我的系统是R3.5.1和Rstudio 1.1.463 在我的数据框df中有两列,cola和colb: df <- data.frame( cola = c("A","C",NA,"C"), colb = c("C",NA,"C","D")) 当colb不是NA时,我想用colb覆盖cola,当colb是NA时采用cola df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)] # cola colb #1
df
中有两列,cola
和colb
:
df <- data.frame(
cola = c("A","C",NA,"C"),
colb = c("C",NA,"C","D"))
当colb
不是NA
时,我想用colb
覆盖cola
,当colb
是NA
时采用cola
df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)]
# cola colb
#1 C C
#2 C <NA>
#3 C C
#4 D D
预期结果如下所示:
cola colb
C C
C NA
C C
D D
怎么做?
提前谢谢 使用
dplyr
。由于样本数据具有因子,mutate\u all
已完成:
df %>%
mutate_all(as.character) %>%
mutate(cola=ifelse(is.na(colb),cola,colb))
结果:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
可乐可乐
1c
2 C
3C
四维
使用
dplyr
。由于样本数据具有因子,mutate\u all
已完成:
df %>%
mutate_all(as.character) %>%
mutate(cola=ifelse(is.na(colb),cola,colb))
结果:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
可乐可乐
1c
2 C
3C
四维
当colb
不是NA
时,我们可以替换cola
中的值
df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)]
# cola colb
#1 C C
#2 C <NA>
#3 C C
#4 D D
df$cola[!is.na(df$colb)]当colb
不是na
时,我们可以替换cola
中的值
df$cola[!is.na(df$colb)] <- df$colb[!is.na(df$colb)]
# cola colb
#1 C C
#2 C <NA>
#3 C C
#4 D D
df$cola[!is.na(df$colb)]coalesce
来自dplyr
包的函数在这里很有用:
library(dplyr)
df %>%
mutate(cola = coalesce(colb, cola))
输出:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
可乐可乐
1c
2 C
3C
四维
聚合
来自dplyr
软件包的功能在这里很有用:
library(dplyr)
df %>%
mutate(cola = coalesce(colb, cola))
输出:
cola colb
1 C C
2 C <NA>
3 C C
4 D D
可乐可乐
1c
2 C
3C
四维
我提供的解决方案如下:
应首先将因子
列转换为字符
列
df$cola我提供的解决方案如下:
应首先将因子
列转换为字符
列
运行此答案时,df$cola找不到函数“%%>%”
。install.packages(“dplyr”)
<代码>库(dplyr)
然后运行代码。当无法使用%%>%%
时,我的答案有什么问题吗?@kittygirl这只是偏好和方便。很好。运行此答案时找不到函数“%%>%”
。install.packages(“dplyr”)
<代码>库(dplyr)
然后运行代码。当无法使用%%>%%
时,我的答案有什么问题吗?@kittygirl这只是偏好和方便。很好。在我运行这个答案时找不到函数“%%>%”
。在我运行这个答案时找不到函数“%%>%”
。@kittygirl是的,你需要将它们保留为字符,否则t将无法使用不同级别的因子分配值。我的答案如何,请给我评论。@kittygirl是的,您需要将它们保留为字符,否则t将无法使用不同级别的因子
赋值。我的答案如何,请给我评论。这在功能上与其他答案相同,是的-这很好。如果你复制df
并应用此函数,你将在cola
中得到1、2、1、2的输出,而不是字符,因为列是因子。这在功能上与其他答案相同,所以是的-这很好。如果你复制df
并应用此函数,你将得到1、2、1的输出,2在cola
中,而不是字符,因为列是因子。