R - 从其他多列的条件运算创建列

时间:2016-07-04 18:12:52

标签: r dataframe

我尝试使用以下逻辑创建一个新列:对于每一行,如果行名称是' 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

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
相关问题