变量Jaehrlichkeit
基本上是具有3个级别的因子:HQ30
,HQ100
,HQ300
。我希望R阅读Jaehrlichkeit
。如果Jaehrlichkeit
= HQ30
,则将相应行中列intHQ30
的值复制并粘贴到新创建的列Intensitaet
中。对HQ100
和HQ300
重复此操作。基于其他列的值添加列
我试图结合mutate
功能与嵌套ifelse
,但不断收到错误。可以请别人帮我吗?或者可能建议一个更简单的解决
变量Jaehrlichkeit
基本上是具有3个级别的因子:HQ30
,HQ100
,HQ300
。我希望R阅读Jaehrlichkeit
。如果Jaehrlichkeit
= HQ30
,则将相应行中列intHQ30
的值复制并粘贴到新创建的列Intensitaet
中。对HQ100
和HQ300
重复此操作。基于其他列的值添加列
我试图结合mutate
功能与嵌套ifelse
,但不断收到错误。可以请别人帮我吗?或者可能建议一个更简单的解决
我们可以通过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)))]
另一种选择是分裂和应用,即
do.call(rbind, lapply(split(df, df$Jaehrlichkeit), function(i) {
i$Intensitaet <- i[[grep(i$Jaehrlichkeit[1], names(i))]]; i
}))
由于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)
顺序数据帧intHQ30
和intHQ300
的价值。Intensitaet
列。
非常感谢。这正是我所需要的。我很着迷一些用户解决问题的方便程度。 – Danka
@丹卡感谢您的回复。你也可以勾选[here](https://stackoverflow.com/help/someone-answers) – akrun