【问题标题】:How to get values from one column corresponding to other如何从与另一列对应的一列中获取值
【发布时间】: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你认为适合你的用例,这样问题就可以被认为是关闭的。

标签: python r dataframe


【解决方案1】:

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))

【讨论】:

    【解决方案2】:

    你可以这样做:

    split(df$Stage)
    

    该值将被拆分为一个列表。

    HTH

    【讨论】:

      【解决方案3】:

      如果我们使用 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"
      

      【讨论】:

        【解决方案4】:

        在 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-12
          • 1970-01-01
          • 1970-01-01
          • 2014-09-06
          • 1970-01-01
          • 2019-05-23
          • 2023-03-19
          • 1970-01-01
          相关资源
          最近更新 更多