Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于行中的值的数据帧的名称列表_R_Subset_Lapply - Fatal编程技术网

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@M76
do.call(粘贴,…)
只需将行粘贴到一个字符串中即可。并将其用作分割因子