R 基于行中的值的数据帧的名称列表
我已经从这个数据帧R 基于行中的值的数据帧的名称列表,r,subset,lapply,R,Subset,Lapply,我已经从这个数据帧df structure(list(ï..Name = structure(c(5L, 5L, 12L, 6L, 10L, 13L, 7L, 1L, 4L, 2L, 9L, 8L, 3L, 11L), .Label = c("Alex", "Alice", "Greg", "Jay", "Jim", "Mick", "Mike", "Patrick", "Reese", "Sarah", "Simon", "Sue", "Timmy"), class = "factor"
df
structure(list(ï..Name = structure(c(5L, 5L, 12L, 6L, 10L, 13L,
7L, 1L, 4L, 2L, 9L, 8L, 3L, 11L), .Label = c("Alex", "Alice",
"Greg", "Jay", "Jim", "Mick", "Mike", "Patrick", "Reese", "Sarah",
"Simon", "Sue", "Timmy"), class = "factor"), Partner = structure(c(7L,
9L, 7L, 11L, 10L, 2L, 1L, 1L, 4L, 8L, 5L, 6L, 3L, 3L), .Label = c("Alan",
"Alex", "Britney", "Dalton", "Jeff", "Mary", "Peggy", "Percy",
"Sue", "Susan", "Tara"), class = "factor"), Group1 = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("a",
"b", "c", "d", "e", "f", "g"), class = "factor"), Group2 = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Alpha",
"Bravo ", "Charlie", "Delta", "Echo", "Foxtrot", "Gamma"), class = "factor")), class = "data.frame", row.names = c(NA,
-14L))
使用此代码
list_df=df %>%
split(group_indices_(df, .dots =c("Group1","Group2")))
我首先尝试通过组合Group1
和Group2
中的因子来命名每个数据帧对象。然后,我尝试对列表中的每个数据帧进行分类和子集,使其在第1列中只有名称列,在第2列中只有合作伙伴
通过这样做,我已经能够对数据帧进行子集划分
sub_toy=lapply(list_df, select,ï..Name, Partner)
我不知道的是,在我创建子集之前,如何实际命名其中的对象列表,以便我知道每个数据帧属于哪个组组合
split(df[1:2], df[3:4], TRUE)
split(df[1:2], do.call(paste, df[3:4]))
这是我想出的一个快速解决方案。希望得到您想要的:
n <- names(list_df)
for(ii in 1:length(list_df)) {
n[ii] = paste(as.character(unique(list_df[[ii]][[3]])),
"_",
as.character(unique(list_df[[ii]][[4]])),
sep = "")
}
names(list_df) <- n
l <- lapply(list_df, function(x) {x[,-c(3,4)]}) #or your function call, too
n第二个答案看起来不错,但有没有办法通过列名进行选择?例如,我是否可以像df[“ï..名称”,“合作伙伴”]
这样索引,而不是df[1:2]
?我知道这段代码实际上不起作用,但有没有一种方法可以用这个列来做类似的事情呢names@M76是的,您可以使用c
组合名称,比如split(df[c(“ï.Name”,“Partner”)],do.call(粘贴,df[3:4])
,它将返回相同的结果。它可以工作!但是,您能再解释一下代码在做什么吗?就为了我自己edification@M76do.call(粘贴,…)
只需将行粘贴到一个字符串中即可。并将其用作分割因子