【问题标题】:How can I make a data.frame using chr vertor [duplicate]如何使用 chr vertor 制作 data.frame [重复]
【发布时间】:2020-03-16 11:01:10
【问题描述】:

我有下面的data.frame。

> Chr   Chr
> A     E
> A     F
> A     E
> B     G
> B     G
> C     H
> C     I
> D     E

并且...我想将数据集转换如下,您可能会注意到。 我想将所有 chr 向量强制成一行。

chr chr
A    E,F
B    G
C    H,I
D    E

他们都是角色,所以我尝试做几件我想做的事情。

首先,我为FILTER <- unique(chr[,15])1st 列使用了独特的功能,并尝试使用 我使用rbind or bind rows 函数创建的过滤数据。

其次,我测试了我的想法是否有效

FILTER <- unique(Top[,15])

NN <- data.frame()

for(i in 1 :nrow(FILTER)){
  result = unique(Top10Data[TGT == FILTER[i]]$`NM`)) 
  print(result)
} 

到这个阶段,它似乎运作良好。

对我来说问题是,当我使用这两个函数时,数据框只创建 1 列,而忽略了其他向量(来自上述 data.frame 的第二个变量)。

仅对于 chr[1,1],那些函数确实可以很好地工作,但是我有 chr 向量,例如 chr[1,n],这是无法强制的。

这是我的代码供您参考。

FILTER <- unique(Top[,15])

NN <- data.frame()

for(i in 1 :nrow(FILTER)){
  CGONM <- rbind(NN,unique(Top10Data[TGT == FILTER[i]]$`NM`)) 
}

【问题讨论】:

  • aggregate(var2~var1, df, function(x) toString(unique(x)))

标签: r string dataframe character


【解决方案1】:

基础 R 解决方案:

# Solution 1: 

df_str_agg1 <- aggregate(var2~var1, df, FUN = function(x){
  paste0(unique(x), collapse = ",")})

# Solution 2: 

df_str_agg2 <- data.frame(do.call("rbind",lapply(split(df, df$var1), function(x){
    data.frame(var1 = unique(x$var1), 
               var2 = paste0(unique(x$var2), collapse = ","))
      }
    )
  ),
  row.names = NULL
)

Tidyverse 解决方案:

library(tidyverse)
df_str_agg3 <- 
  df %>% 
  group_by(var1) %>% 
  summarise(var2 = str_c(unique(var2), collapse = ",")) %>% 
  ungroup()

数据:

df <- data.frame(var1 = c("A", "A", "A", "B", "B", "C", "C", "D"),
                 var2 = c("E", "F", "E", "G", "G", "H", "I", "E"), stringsAsFactors  = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多