R 基于其他列的值添加列

R 基于其他列的值添加列,r,dataframe,R,Dataframe,变量Jaehrlichkeit基本上是一个具有3个级别的因子:HQ30,HQ100,HQ300。我想让R读一下Jaehrlichkeit。如果Jaehrlichkeit=HQ30,则复制对应行中列intHQ30中的值,并将其粘贴到新创建的列Intensitaet。对HQ100和HQ300重复此操作 我试图将mutate函数与嵌套的ifelse组合在一起,但不断出现错误。谁能帮帮我吗?或者建议一个更简单的解决方案?我们可以通过行/列索引来实现这一点。使用grep获取以“int”开头,后跟“HQ”和

变量
Jaehrlichkeit
基本上是一个具有3个级别的因子:
HQ30
HQ100
HQ300
。我想让R读一下Jaehrlichkeit。如果
Jaehrlichkeit
=
HQ30
,则复制对应行中列
intHQ30
中的值,并将其粘贴到新创建的列
Intensitaet
。对
HQ100
HQ300
重复此操作


我试图将
mutate
函数与嵌套的
ifelse
组合在一起,但不断出现错误。谁能帮帮我吗?或者建议一个更简单的解决方案?

我们可以通过
行/列
索引来实现这一点。使用
grep
获取以“int”开头,后跟“HQ”和一些数字(
\\d+
)的列的名称。然后,通过将“Jaehrlichkeit”与子字符串“v1”匹配,
cbind
与行序列匹配,获得每行的列索引,并使用该索引从
intHQ
列中提取值,并将其分配给创建“Intensitaet”

v1 <- grep("^intHQ\\d+", names(sub1), value = TRUE)
sub1$Intensitaet <- sub1[v1][cbind(1:nrow(sub1), 
           match(sub1$Jaehrlichkeit, sub("int", "", v1)))]

v1另一个选项是拆分并应用,即

do.call(rbind, lapply(split(df, df$Jaehrlichkeit), function(i) {
                      i$Intensitaet <- i[[grep(i$Jaehrlichkeit[1], names(i))]]; i
                                                              }))
do.call(rbind,lapply(split)(df,df$Jaehrlichkeit),函数(i){

i$Intensitaet因为
Jaehrlichkeit
是类型因子,所以可以进行向量化:

r <- sub1[,match(paste0("int", levels(sub1$Jaehrlichkeit)), names(sub1))]
sub1$Intensitaet <- r[cbind(seq(nrow(r)), as.numeric(sub1$Jaehrlichkeit))]

r非常感谢。这正是我所需要的。我被一些用户解决问题的简单程度所吸引。