我尝试使用以下逻辑创建一个新列:对于每一行,如果行名称是' 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 ...
ETC。我正在尝试的代码示例:
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
答案 0 :(得分:1)
尝试类似这样的内容,接近您尝试的内容,但self.Action1
方式更多:
R
或使用df$nexcol = rowSums(!is.na(df[5:10]))
df$nexcol = with(df, ifelse(name == 'N', 1, ifelse(nexcol == 0, v1, nexcol)))
df
# name year v1 COL1 COL2 COL3 COL4 COL5 COL6 COL7 nexcol
# 1 S 1960 2.00 0.000000 NA NA NA NA NA NA 2
# 2 S 1961 3.00 0.000000 NA NA NA NA NA NA 3
# 3 S 1962 4.00 0.000000 52 NA NA NA 10 NA 2
# 4 S 1963 2.00 0.000000 NA NA NA NA NA NA 2
# 5 N 1964 3.00 0.000000 NA NA 55 NA 22 NA 1
# 6 S 1965 -0.13 -0.160506 NA NA NA NA NA 45 1
包:
dplyr