R语言 将值作为字符串取出,并将其用作列表中dfs的列名

n9vozmp4  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(138)

我想使用helper-column的第一个值,它在每一行中包含相同的字符串,作为列的列名,列中有实际的值。dfs存储在一个列表中。有办法用purrr处理这个问题吗?(我试过了,但没有找到解决方案)
示例:

# Create dataframe
df1 = data.frame(
  A = c(1, 2, 3),
  B = c("df1", "df1", "df1")
)

# Create another dataframe
df2 = data.frame(
  A = c(4, 5, 6),
  B = c("df2", "df2", "df2")
)

# Create list of data frames
list1 = list(df1, df2)

这就是我希望dfs在列表中的样子:

[[1]]
  df1   
1 1 
2 2 
3 3 

[[2]]
  df2  
1 4 
2 5 
3 6

我真的很感谢任何想法和解决方案,谢谢!!
我尝试过提取包含字符串的第一个值,但我想不出一个解决方案,允许我将这些值作为新的列名Map到列表中。

w46czmvw

w46czmvw1#

我们可以使用tibble::lst创建一个命名的data.frame列表,然后使用map取消选择B列:

library(tibble)
library(dplyr)
library(purrr)

list1 = lst(df1, df2)
list1 %>% 
  map(~ select(.x, !B))

#> $df1
#>   A
#> 1 1
#> 2 2
#> 3 3
#> 
#> $df2
#>   A
#> 1 4
#> 2 5
#> 3 6

数据来自OP

# Create dataframe
df1 = data.frame(
  A = c(1, 2, 3),
  B = c("df1", "df1", "df1")
)

# Create another dataframe
df2 = data.frame(
  A = c(4, 5, 6),
  B = c("df2", "df2", "df2")
)

reprex package(v2.0.1)于2023年2月21日创建

idfiyjo8

idfiyjo82#

如果可能的话,我会采用Tim的解决方案,但是,如果您的 Dataframe 命名与B列不同,您可以这样做

first_data = data.frame(
    A = c(1, 2, 3),
    B = c("df1", "df1", "df1")
  )
  
  # Create another dataframe
  second_data = data.frame(
    A = c(4, 5, 6),
    B = c("df2", "df2", "df2")
  )

  library(purrr)
  library(dplyr)
  list(first_data,second_data) |> 
    set_names(c((first_data$B[1]), second_data$B[1])) |> 
    map(~.x |> select(-B))

$df1
  A
1 1
2 2
3 3

$df2
  A
1 4
2 5
3 6

相关问题