使用列名重命名行值,然后使用R将其聚合为一列
我有一个data.frame,行值为0和1。现在我需要用列名替换1。稍后,我需要将它们聚合到一列(因为一行中没有重复) 数据框看起来像这个使用列名重命名行值,然后使用R将其聚合为一列,r,R,我有一个data.frame,行值为0和1。现在我需要用列名替换1。稍后,我需要将它们聚合到一列(因为一行中没有重复) 数据框看起来像这个 var1 var2 var3 0 1 0 1 0 0 0 0 1 预期产量 var1 var2 var3 var 0 var2 0 var2 var1 0 0 var1 0 0 var3 var3 G
var1 var2 var3
0 1 0
1 0 0
0 0 1
预期产量
var1 var2 var3 var
0 var2 0 var2
var1 0 0 var1
0 0 var3 var3
Gather将创建一个包含var名称的列和一个包含值的列。之后,您可以只过滤到值1,然后删除值列
library(dplyr) # for piping
library(tidyr) # for gather
df %>%
gather(var,value) %>% # the arguments simply name the output columns
filter(value == 1) %>%
select(-value)
您可以结合使用
ifelse
语句将1替换为列名
e、 g
df$var1=ifelse(df$var1==1,“var1”,0)
如果您想在多个列上进行迭代,您可以使用
lappy
和列名列表,然后在ifelse
语句中使用names(df[x])
基R解决方案,而不是使用“var1”来复制任意数据帧和目标值:
df <- data.frame(
var1 = c(0,1,0),
var2 = c(1,0,0),
var3 = c(0,0,1))
# Task 1
val <- 1 # value to subsitute
for (n in names(df)){
df[[n]][df[[n]] == val] <- n
}
# Task 2
df$var <- apply(df, 2, function(x) x[grepl("var", x)])
df作为一个新手程序员,这很容易理解。gather
在为NA
时没有保留行值。而且它没有保持行的完整性。我无法掌握任务2中的函数(x)。我应该在哪里了解它?感谢您的解决方案。apply
withMARGIN=2
按行应用我定义的函数。函数返回括号内条件为true的行的元素grepl
将搜索模式(“var”)并返回TRUE/FALSE。在R控制台中键入?apply
和?grepl
以了解更多信息。感谢您提供的解释。现在我意识到R中for循环的威力。您提供了一个极好的解决方案。我已经改变了公认的答案。谢谢你的回答@slava