我想用对应行另一列的值填充一个单元格。
我收到错误消息
Warning message:
In ukDataTest$s[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)] <- ukDataTest$s_2013 :
number of items to replace is not a multiple of replacement length
当我跑步时:
ukDataTest$s[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)] <- ukDataTest$s_2013
我认为这是因为我实际上是在分配一整列值。
我想在ukDataTest $ s_2013的相应行上分配值。
我该怎么做?
示例数据:
library(dplyr)
number <- c(1,2,3,4,5)
s <- c(0.1,NA,0.5,NA,0.8)
s_2013 <- c(NA,0.3,NA,0.7,NA)
cbind(number,s,s_2013)
答案 0 :(得分:1)
对于错误原因,您是正确的。解决方案是仅尝试替换另一列中的相应行,如
ukDataTest$s[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)] <- ukDataTest$s_2013[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)]
下面是一些玩具数据的例子
> dat <- data.frame(col1 = c(2, NA, 3, NA, 1, 1, NA, NA),
+ col2 = c(1, 1, NA, 2, 2, NA, NA, 4))
>
> dat$col1
[1] 2 NA 3 NA 1 1 NA NA
>
> dat$col1[is.na(dat$col1) & !is.na(dat$col2)] <- dat$col2[is.na(dat$col1) & !is.na(dat$col2)]
>
> dat$col1
[1] 2 1 3 2 1 1 NA 4
或者,使用您在问题中发布的数据。
> number <- c(1,2,3,4,5)
> s <- c(0.1,NA,0.5,NA,0.8)
> s_2013 <- c(NA,0.3,NA,0.7,NA)
>
> dat <- data.frame(number, s, s_2013)
>
> dat$s[is.na(dat$s) & !is.na(dat$s_2013)] <- dat$s_2013[is.na(dat$s) & !is.na(dat$s_2013)]
>
> dat$s
[1] 0.1 0.3 0.5 0.7 0.8
答案 1 :(得分:0)
现在它们的大小相同,并且每当is.na(ukDataTest $ s)和!is.na(ukDataTest $ s_2013)为true时,列s_2013的对应行值将分配给s。
ukDataTest$s[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)] <- ukDataTest$s_2013[is.na(ukDataTest$s) & !is.na(ukDataTest$s_2013)]