我有一个像这样的数据框
Action Stage
a1 A
a2 A
a3 B
a4 B
我希望得到像A=[a1,a2] and B=[a3,a4]
如何在R或python中完成?
答案 0 :(得分:0)
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))
答案 1 :(得分:0)
你可以这样做:
split(df$Stage)
该值将拆分为一个列表。
HTH
答案 2 :(得分:0)
如果我们使用来自Prems的数据对象回答(但是将其命名为dfrm以避免与名为df
的函数混淆)以及使用来自Sofaine的split
的想法(但使用Stage列作为第二个参数而不是第一个参数然后
(sdfrm <- split( dfrm$Action, dfrm$Stage))
$A
[1] "a1" "a2"
$B
[1] "a3" "a4"
> sdfrm$A
[1] "a1" "a2"
答案 3 :(得分:0)
在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