我正在尝试使用以下逻辑创建一个新列:对于每一行,如果行名称为's',则新列将获取非空列总和(在子集中)的值,除非总和为零,在哪种情况下它应该取v1列的值 .
data.frame的一个例子
name year v1 COL1 COL2 COL3 COL4 COL5 COL6 COL7
1 S 1960 0.00 0.000000000 NA NA NA NA NA NA ...
2 S 1961 0.00 0.000000000 NA NA NA NA NA NA ...
3 S 1962 0.00 0.000000000 NA NA NA NA NA NA ...
4 S 1963 0.00 0.000000000 NA NA NA NA NA NA ...
5 N 1964 0.00 0.000000000 NA NA 55 NA 22 NA ...
6 S 1965 -0.13 -0.160505952 NA NA NA NA NA 45 ...
等等 . 我正在尝试的代码示例:
df$nexcol <- 0
df$nexcol[df["name"]=="S"] <-ifelse(rowSums(!is.na(df[df["name"]=="S",5:106]))==0,
df[df["name"]=="S","V1"],rowSums(!is.na(df[df["name"]=="S",5:106])))
df$nexcol[df["name"]=="N"] <- 1
预期的结果是
name year v1 COL1 COL2 COL3 COL4 COL5 COL6 COL7 ... nexcol
1 S 1960 2.00 0.000000000 NA NA NA NA NA NA ... 2.00
2 S 1961 3.00 0.000000000 NA NA NA NA NA NA ... 3.00
3 S 1962 4.00 0.000000000 52 NA NA NA 10 NA ... 2
4 S 1963 2.00 0.000000000 NA NA NA NA NA NA ... 2.00
5 N 1964 3.00 0.000000000 NA NA 55 NA 22 NA ... 1
6 S 1965 -0.13 -0.160505952 NA NA NA NA NA 45 ... 1
1 回答
尝试类似这样的事情,接近你尝试过的东西,但更多的是
R
方式:或者使用
dplyr
包: