R 根据每行的列';s号

R 根据每行的列';s号,r,R,3I具有以下功能: nombre_points<-function(typeAction) { if(typeAction==1) {return(4)} else if (typeAction==2) {return(3)} else if (typeAction==3) {return(2)} } 我想将上述函数应用到这个数据帧,其中 nombre_points函数是列的编号 因此,我需要为每行获取一个数据帧,如下所示: df> ID Resu

3I具有以下功能:

nombre_points<-function(typeAction)
{
  if(typeAction==1)
  {return(4)}
  else if (typeAction==2)
  {return(3)}
  else if (typeAction==3)
  {return(2)}
}
我想将上述函数应用到这个数据帧,其中
nombre_points
函数是列的编号

因此,我需要为每行获取一个数据帧,如下所示:

df>

    ID Result
    XX 7
    YY 14
    EE 16
    ZZ 17
事实上,对于观察ZZ,例如
17=0*4+3*3+4*2
同样对于XX观察,我们有一个分数:
7=0*4+3*1+2*2

我尝试使用
应用
功能:

dd<-apply(df,1,nombre_points)

dd更新

因为,这些值可能与列号无关,所以我们可以创建命名向量或查找数据帧来获取相应的值

使用查找表:

named_df <- data.frame(col = c(1, 2, 3), value = c(4, 3, 2))
rowSums(df[-1] * named_df$value[col(df[-1])])
#[1]  7 16 16 17
为便于理解,
col(df)

#     [,1] [,2] [,3] [,4]
#[1,]    1    2    3    4
#[2,]    1    2    3    4
#[3,]    1    2    3    4
#[4,]    1    2    3    4

更新

因为,这些值可能与列号无关,所以我们可以创建命名向量或查找数据帧来获取相应的值

使用查找表:

named_df <- data.frame(col = c(1, 2, 3), value = c(4, 3, 2))
rowSums(df[-1] * named_df$value[col(df[-1])])
#[1]  7 16 16 17
为便于理解,
col(df)

#     [,1] [,2] [,3] [,4]
#[1,]    1    2    3    4
#[2,]    1    2    3    4
#[3,]    1    2    3    4
#[4,]    1    2    3    4

阅读
ifelse
@zx8754,那么
nombre_points
函数呢??它输入了列数。您仍然确定计算结果吗?
XX
不应该是7吗<代码>(0*4)+(1*3)+(2*2)
YY
EE
也需要更新,我想。@Ronaksah,是的,你是对的,我只是纠正了it@SA2018我已经更新了答案,请看一看。PS-YY的
YY
的值应该是
(1*4)+(2*3)+(3*2)=16
?阅读
ifelse
@zx8754,那么
nombre_points
函数呢??它输入了列数。您仍然确定计算结果吗?
XX
不应该是7吗<代码>(0*4)+(1*3)+(2*2)
YY
EE
也需要更新,我想。@Ronaksah,是的,你是对的,我只是纠正了it@SA2018我已经更新了答案,请看一看。PS-YY的
YY
值应为
(1*4)+(2*3)+(3*2)=16
?如果该函数是通用的,如何?请看编辑问题。我举的例子只是为了让它变得简单,但实际上我处理的是更复杂的问题data@SA2018你能再核对一下你的计算吗?那么你想对第3列做些什么呢?如果函数是通用的呢?请看编辑问题。我举的例子只是为了让它变得简单,但实际上我处理的是更复杂的问题data@SA2018你能再核对一下你的计算吗?那么你想为第三栏做什么?
#     [,1] [,2] [,3] [,4]
#[1,]    1    2    3    4
#[2,]    1    2    3    4
#[3,]    1    2    3    4
#[4,]    1    2    3    4