我一直试图从摘要列表中提取数据并保留列指示符。
这是一个数据的例子
data = data.frame( Var1 = c("Esp1"), Var2 = c("Tra1", "Tra2", "Tra3"))
data$New[[1]] <- c(list(data.frame( P.value =runif(1, 0.03, 0.08) , DF =runif(1, 1, 4) , ChisQ =runif(1, 0.03, 0.08) )),list(data.frame(factor = c("z"), value= sample(100,1))) , list(data.frame(factor = c(1:4), value= sample(100,4))) , list(data.frame( Group = c("A"), row.names =c("Control", "X1", "X2", "X3", "X4"), Value =sample(100, size=5, replace = TRUE))))
data$New[[2]] <- c(list(data.frame( P.value =runif(1, 0.03, 0.08) , DF =runif(1, 1, 4) , ChisQ =runif(1, 0.03, 0.08) )),list(data.frame(factor = c("z"), value= sample(100,1))) , list(data.frame(factor = c(1:4), value= sample(100,4))) , list(data.frame( Group = c("A"), row.names =c("Control", "X1", "X2", "X3", "X4"), Value =sample(100, size=5, replace = TRUE))))
data$New[[3]] <- c(list(data.frame( P.value =runif(1, 0.03, 0.08) , DF =runif(1, 1, 4) , ChisQ =runif(1, 0.03, 0.08) )),list(data.frame(factor = c("z"), value= sample(100,1))) , list(data.frame(factor = c(1:4), value= sample(100,4))) , list(data.frame( Group = c("A"), row.names =c("Control", "X1", "X2", "X3", "X4"), Value =sample(100, size=5, replace = TRUE))))
names(data$New[[1]]) <- c("Statistics","xx1","xx2", "groups")
names(data$New[[2]]) <- c("Statistics","xx1","xx2", "groups")
names(data$New[[3]]) <- c("Statistics","xx1","xx2", "groups")
我希望从每个结果列表中只提取groups ( 5行)和statistics (1行)选项卡,并将它们与列Var 1和Var2的相应值一起放在一个表中。在选项卡组选项卡中,row.names表示用于分析的处理。
我尝试使用扫帚::整洁(它适用于其他结果列表),但此列表分发失败
到目前为止,我已经能够从提取的组及其相关行名称创建表,但无法正确设置Var1和Var2值。
data.1 <- lapply(data[[3]], function(x) x$groups)
data.2 <- lapply(data.1, function(x) { x$Treatment <-rownames(x);return(x)})
data.group<- do.call(rbind.data.frame, data.2)
rownames(data.group) <- 1:nrow(data.group)
我已经走了这么远了
> data.group
Group Value Treatment
1 A 24 Control
2 A 96 X1
3 A 76 X2
4 A 26 X3
5 A 10 X4
6 A 58 Control
7 A 33 X1
8 A 30 X2
9 A 54 X3
10 A 48 X4
11 A 66 Control
12 A 80 X1
13 A 97 X2
14 A 86 X3
15 A 86 X4
这一行不起作用,无法让lapply读取列Var1和Var2
data.2.1 <- lapply(data.2, function(x) { x$Var1 <-unlist(data$Var1[[(x)]]) ;return(x)})
data.2.2 <- lapply(data.2, function(x) { x$Var2 <-data[[2]][[x]] ;return(x)})
这就是我想要的表格输出。
> data.group
Var1 Var2 Treatment Value Group P.value Df
1 Esp1 Tra1 Control 70 A 0.0730726366001181 0.0566315333195962
2 Esp1 Tra1 X1 27 A
3 Esp1 Tra1 X2 3 A
4 Esp1 Tra1 X3 16 A
5 Esp1 Tra1 X4 58 A
6 Esp1 Tra2 Control 2 A 0.0669188804645091 0.043313137262594
7 Esp1 Tra2 X1 58 A
8 Esp1 Tra2 X2 87 A
9 Esp1 Tra2 X3 12 A
10 Esp1 Tra2 X4 23 A
11 Esp1 Tra3 Control 58 A 0.0698359214654192 0.0380288420431316
12 Esp1 Tra3 X1 80 A
13 Esp1 Tra3 X2 44 A
14 Esp1 Tra3 X3 100 A
15 Esp1 Tra3 X4 78 A
ChisQ
1 0.0551552523346618
2
3
4
5
6 0.0415172106772661
7
8
9
10
11 0.0434505424182862
12
13
14
15
>
谢谢你的回复!!
我们可以从purrr
使用map
library(purrr)
library(dplyr)
data <- data %>%
mutate(New = map(New, ~ list(Statistics = .x$Statistics, groups = .x$groups)))
data$New
#[[1]]
#[[1]]$Statistics
# P.value DF ChisQ
#1 0.05901864 2.223526 0.07536408
#[[1]]$groups
# Group Value
#Control A 62
#X1 A 49
#X2 A 69
#X3 A 15
#X4 A 88
#[[2]]
#[[2]]$Statistics
# P.value DF ChisQ
#1 0.06802287 1.506049 0.06263245
#[[2]]$groups
# Group Value
# ...
由于统计信息
和组
是包含彼此不相关信息的数据帧,因此我建议您将它们保留在列表中,并仅选择感兴趣的信息。
data$New <- lapply(data$New,function(x)
list(Statistics = x$Statistics, groups = x$groups))
data$New
#[[1]]
#[[1]]$Statistics
# P.value DF ChisQ
#1 0.0747 2.22 0.0345
#[[1]]$groups
# Group Value
#Control A 98
#X1 A 76
#X2 A 71
#X3 A 62
#X4 A 25
#[[2]]
#[[2]]$Statistics
# P.value DF ChisQ
#1 0.074 3.71 0.0781
#[[2]]$groups
# Group Value
#Control A 31
#X1 A 92
#...
#....
对于更新的预期输出,我们可以做
list_df <- lapply(data$New,function(x) data.frame(Control = rownames(x$groups),
Value = x$groups$Value, Group = x$groups$Group, P.value = x$Statistics$P.value,
DF = x$Statistics$DF, ChisQ = x$Statistics$ChisQ))
new_df <- data[rep(seq_len(nrow(data)), sapply(list_df, nrow)), ]
new_df$New <- NULL
cbind(new_df, do.call(rbind, list_df))
或类似但使用tidyverse
data$New <- purrr::map(data$New,function(x) data.frame(Control = rownames(x$groups),
Value = x$groups$Value, Group = x$groups$Group, P.value = x$Statistics$P.value,
DF = x$Statistics$DF, ChisQ = x$Statistics$ChisQ))
data %>% tidyr::unnest(New)
有了水果列表,我想检查它们是否存在于数据帧中(不管是哪个列),并指明它们。 这些守则的问题包括: 它显示的不是水果,而是整个内容。例如,14805行,应仅为“Blackberry”,而不是整个原始内容 我怎样才能做到呢?非常感谢。 这是当前输出和所需输出的屏幕截图。
Inserting in Sorted Order # bisect_example.py import bisect # A series of random numbers values = [14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 77, 1] print('New Pos Contents') print('--- --- ----
我正在使用hibernate 4和Spring 3。 我有5个表,每个表映射一个实体类。现在,如果我必须从1个表中选择列,我将执行以下操作: 此结果中的此值将为EmployeeEntity类型。 或者我也可以使用标准。 现在我的要求是我必须从所有5个表中得到结果。每个表中有1-2列。 早些时候,它是一个1表,所以我得到了一个实体,现在我得到了5个表的结果,所以如何在实体中映射它。 List res
问题内容: 我在python中有一个 统一 的对象列表: 现在,我想提取一个具有该类某些属性的列表(比如attr),以便将其传递给某个函数(例如用于绘制该数据) pythonic的做法是什么, ? 也许派生列表并添加一个方法,所以我可以使用一些习惯用法,例如 ? 问题答案: 您还可以编写: 这样,您将获得一个节省内存的生成器。有关更多好处,请参见Generator Expressions 。
rank ▲ ✰ vote url 45 441 233 760 url 合并列表中的列表 可能重复的问题: Flattening a shallow list in Python Comprehension for flattening a sequence of sequences? 我想是不是有更好的方法 我可以用一个循环来做,但是除了这样做还有什么更cool的用一行来做的方法?我用redu
问题内容: 我有一个字典列表,我需要从字典的给定键中获取值的列表(所有字典都具有相同的键)。 例如,我有: 我需要得到1,2,3 当然,我可以通过以下方式获得它: 但是我想找到一种更好的方法。 问题答案: 使用简单的列表推导(如果您确定每个字典都有键): 否则,您需要首先检查是否存在: