【发布时间】:2018-06-22 21:44:11
【问题描述】:
我有一个这样的数据框
Action Stage
a1 A
a2 A
a3 B
a4 B
我想获得像A=[a1,a2] and B=[a3,a4]这样的价值
如何在 R 或 python 中做到这一点?
【问题讨论】:
-
你应该accept the answer你认为适合你的用例,这样问题就可以被认为是关闭的。
我有一个这样的数据框
Action Stage
a1 A
a2 A
a3 B
a4 B
我想获得像A=[a1,a2] and B=[a3,a4]这样的价值
如何在 R 或 python 中做到这一点?
【问题讨论】:
R 解决方案可能是
library(dplyr)
df %>%
group_by(Stage) %>%
summarize(Val=paste0("[",paste(Action,collapse = ","),"]")) %>%
rowwise() %>%
mutate(desired_val = paste(Stage, Val, sep = "="))
输出是:
Stage Val desired_val
1 A [a1,a2] A=[a1,a2]
2 B [a3,a4] B=[a3,a4]
#sample data
> dput(df)
structure(list(Action = c("a1", "a2", "a3", "a4"), Stage = c("A",
"A", "B", "B")), .Names = c("Action", "Stage"), class = "data.frame", row.names = c(NA,
-4L))
【讨论】:
你可以这样做:
split(df$Stage)
该值将被拆分为一个列表。
HTH
【讨论】:
如果我们使用 Prems answer 中的数据对象(但将其命名为 dfrm 以避免与名为 df 的函数混淆)以及使用 Sofaine 中的 split 的想法(但使用 Stage 列作为第二个参数而不是第一个)然后
(sdfrm <- split( dfrm$Action, dfrm$Stage))
$A
[1] "a1" "a2"
$B
[1] "a3" "a4"
> sdfrm$A
[1] "a1" "a2"
【讨论】:
在 R 中,使用您的示例:
Action <- c("a1","a2","a3","a4")
Stage <- c("A","A","B","B")
data <- data.frame(Action, Stage)
> u <- unique(Stage)
> v <- vector()
> for(i in 1:length(u)){
+ v[i] <- paste(data[which(data$Stage == u[i]),"Action"],collapse=",")
+ }
> d <- data.frame(u,v)
> d
u v
1 A a1,a2
2 B a3,a4
【讨论】: