2017-05-26 100 views
1

变量Jaehrlichkeit基本上是具有3个级别的因子:HQ30HQ100HQ300。我希望R阅读Jaehrlichkeit。如果Jaehrlichkeit = HQ30,则将相应行中列intHQ30的值复制并粘贴到新创建的列Intensitaet中。对HQ100HQ300重复此操作。基于其他列的值添加列

我试图结合mutate功能与嵌套ifelse,但不断收到错误。可以请别人帮我吗?或者可能建议一个更简单的解决

回答

1

我们可以通过row/column建立索引。获取以'int'开头,然后是'HQ'和一些数字(\\d+)并使用grep开头的列的名称。然后,获得每行的列索引match将'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)))] 
+1

非常感谢。这正是我所需要的。我很着迷一些用户解决问题的方便程度。 – Danka

+0

@丹卡感谢您的回复。你也可以勾选[here](https://stackoverflow.com/help/someone-answers) – akrun

1

另一种选择是分裂和应用,即

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

由于Jaehrlichkeit是型因子,你可以这样做矢量:

r <- sub1[,match(paste0("int", levels(sub1$Jaehrlichkeit)), names(sub1))] 
sub1$Intensitaet <- r[cbind(seq(nrow(r)), as.numeric(sub1$Jaehrlichkeit))] 
  • 首先你列intHQ100,在中levels(sub1$Jaehrlichkeit)顺序数据帧intHQ30intHQ300的价值。
  • 然后您生成索引并创建Intensitaet列。