变量Jaehrlichkeit
基本上是一个包含3个级别的因素:HQ30
,HQ100
,HQ300
。我希望R阅读Jaehrlichkeit
。如果Jaehrlichkeit
= HQ30
,请复制相应行中intHQ30
列中的值,并将其粘贴到新创建的列Intensitaet
中。对HQ100
和HQ300
重复此操作。
我试图将mutate
函数与嵌套ifelse
结合起来,但不断收到错误。可以请别人帮帮我吗?或者可能建议一个更简单的解决方案?
答案 0 :(得分:1)
我们可以使用row/column
索引执行此操作。使用\\d+
获取以'int'开头,后跟'HQ'和一些数字(grep
)的列的名称。然后,通过match
使用行序列的'v1',cbind
的子字符串intHQ
获取每行的列索引,并使用该索引从{{1}中提取值}列并指定它来创建'Intensitaet'
v1 <- grep("^intHQ\\d+", names(sub1), value = TRUE)
sub1$Intensitaet <- sub1[v1][cbind(1:nrow(sub1),
match(sub1$Jaehrlichkeit, sub("int", "", v1)))]
答案 1 :(得分:1)
另一种选择是分裂和应用,即
do.call(rbind, lapply(split(df, df$Jaehrlichkeit), function(i) {
i$Intensitaet <- i[[grep(i$Jaehrlichkeit[1], names(i))]]; i
}))
答案 2 :(得分:0)
由于public static void PropertyValuesAreEquals<T>(object actual, object expected)
{
Assert.IsTrue(actual is T);
Assert.IsTrue(expected is T);
foreach (var property in typeof(T).GetProperties().Where(o => o.CanRead))
{
var actualValue = property.GetValue(actual, null);
var expectedValue = property.GetValue(expected, null);
...
}
}
属于类型因素,因此您可以执行此向量化操作:
Jaehrlichkeit
r <- sub1[,match(paste0("int", levels(sub1$Jaehrlichkeit)), names(sub1))]
sub1$Intensitaet <- r[cbind(seq(nrow(r)), as.numeric(sub1$Jaehrlichkeit))]
的顺序在数据框中获得列intHQ100
,intHQ30
和intHQ300
的值。levels(sub1$Jaehrlichkeit)
列。