R将函数应用于多列

R将函数应用于多列,r,nas,sapply,R,Nas,Sapply,我有一个data.frame,有几个列,其中有1个数字(x01-5)或2个数字(x06) >头部(得分) X0 X1 X2 X3 X4 1 8 2 3 3 6 6 4 6 5 8 6 3 4得分$Y0得分$Y0=带(df,ifelse(is.na(得分$Y0),得分$X0,得分$Y0)) 所以最后一个变量YN(Y0)要么是X0,要么是X0分裂的总和 >总分(分数) X0 X1 X2 X3 X4 Y0 1 8

我有一个data.frame,有几个列,其中有1个数字(x01-5)或2个数字(x06)

>头部(得分)
X0 X1 X2 X3 X4
1    8    
2    3    
3     6    6  
4    6    
5    8    
6 3 4得分$Y0得分$Y0=带(df,ifelse(is.na(得分$Y0),得分$X0,得分$Y0))
所以最后一个变量YN(Y0)要么是X0,要么是X0分裂的总和
>总分(分数)
X0 X1 X2 X3 X4 Y0
1    8        8
2    3        3
3     6    6   
4    6        6
5    8        8
6 3 4 7用这个代替:

yvar = score[,paste0("Y",i)]
xvar = score[,paste0("X",i)]

找到了答案-多亏了费迪南德:

> head(score) # Original Data
X1   X2   X0   X3   X4
1  5 1  6 1 <NA> <NA> <NA>
2    1  2 4 <NA> <NA> <NA>
3 <NA> <NA>    6 <NA> <NA>
4 <NA> <NA>    4 <NA> <NA>
5 <NA> <NA>  4 3 <NA> <NA>
6    1  2 4 <NA> <NA> <NA>

> nvars <- max(grep("^X\\d$", names(score)))-1 # Count the # of XN variables (-1)
> nvars
[1] 4

# For each variable, split and sum the resulting numbers
> for (i in 0:nvars) {
+ score[,paste0("Y",i)] <- sapply(strsplit(as.character(score[,paste0("X",i)]), split =     " "), function(x) sum(as.numeric(x)))
+ }
 # Final Data
> head(score)
    X1   X2   X0   X3   X4 Y0 Y1 Y2 Y3 Y4
1  5 1  6 1 <NA> <NA> <NA> NA  6  7 NA NA
2    1  2 4 <NA> <NA> <NA> NA  1  6 NA NA
3 <NA> <NA>    6 <NA> <NA>  6 NA NA NA NA
4 <NA> <NA>    4 <NA> <NA>  4 NA NA NA NA
5 <NA> <NA>  4 3 <NA> <NA>  7 NA NA NA NA
6    1  2 4 <NA> <NA> <NA> NA  1  6 NA NA
>头部(得分)#原始数据
X1 X2 X0 X3 X4
1  5 1  6 1   
2    1  2 4   
3      6  
4      4  
5    4 3  
6    1  2 4   
>nvars nvars
[1] 4
#对于每个变量,将结果数拆分并求和
>用于(0:nVAR中的i){
+分数[,0(“Y”,i)]头(分数)
X1 X2 X0 X3 X4 Y0 Y1 Y2 Y3 Y4
1 5 1 6 1 NA 6 7 NA
2 1 2 4 NA 1 6 NA NA
3.6.6纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳
4不,不,不,不
5 4 3 7不适用不适用不适用不适用不适用不适用
6124NA 16NA NA

对象名称字符串不返回对象。
yvar = score[,paste0("Y",i)]
xvar = score[,paste0("X",i)]
> head(score) # Original Data
X1   X2   X0   X3   X4
1  5 1  6 1 <NA> <NA> <NA>
2    1  2 4 <NA> <NA> <NA>
3 <NA> <NA>    6 <NA> <NA>
4 <NA> <NA>    4 <NA> <NA>
5 <NA> <NA>  4 3 <NA> <NA>
6    1  2 4 <NA> <NA> <NA>

> nvars <- max(grep("^X\\d$", names(score)))-1 # Count the # of XN variables (-1)
> nvars
[1] 4

# For each variable, split and sum the resulting numbers
> for (i in 0:nvars) {
+ score[,paste0("Y",i)] <- sapply(strsplit(as.character(score[,paste0("X",i)]), split =     " "), function(x) sum(as.numeric(x)))
+ }
 # Final Data
> head(score)
    X1   X2   X0   X3   X4 Y0 Y1 Y2 Y3 Y4
1  5 1  6 1 <NA> <NA> <NA> NA  6  7 NA NA
2    1  2 4 <NA> <NA> <NA> NA  1  6 NA NA
3 <NA> <NA>    6 <NA> <NA>  6 NA NA NA NA
4 <NA> <NA>    4 <NA> <NA>  4 NA NA NA NA
5 <NA> <NA>  4 3 <NA> <NA>  7 NA NA NA NA
6    1  2 4 <NA> <NA> <NA> NA  1  6 NA NA