gpt4 book ai didi

r - 根据数据帧包含的字符类型将其合并

转载 作者:行者123 更新时间:2023-12-02 18:28:33 24 4
gpt4 key购买 nike

所以我有以下前 NBA 球员工资的数据框。原始数据位于 .txt 文件中,这就是为什么我的数据框看起来像这样:

  V1         V2         V3          V4         V5         V6
Vinnie Del Negro ..... 150000
Moses Malone ..... 75000
Kevin Willis ...... 150000
Joe Barry Carrol ..... 750000
Doc Rivers .... 230000
Antoine Carr ...... 85000
Hot Rod Williams ... 45000

这只是真实数据框的一瞥,其中包含 350 行和 7 列(非列完全为空)。我想要做的是重新排列这个数据框,以便最终只有两列,一列对应于球员的姓名,另一列对应于他各自的工资:

   name                 salary
Vinnie Del Negro 150000
Moses Malone 75000
Kevin Willis 150000
Joe Barry Carrol 750000
Doc Rivers 230000
Antoine Carr 85000
Hot Rod Williams 45000

也许这非常简单,但我已经尝试解决它几个小时了,但我似乎无法更接近。我认为最好的方法是将所有字母单元格放入第一列,将所有数字单元格放入第二列。唯一的问题是,由于原始数据帧是一个 .txt 文件,所有列都表示为 .characters()。

希望你能帮助我!

谢谢

最佳答案

我们可以使用 tidyr 中的 unite 以及 coalesce (假设 .....NA值)。如果它们是 ...,则通过 mutate 步骤将其更改为 NA(如下所示)

library(dplyr)
library(tidyr)
library(stringr)
library(purrr)
df1 %>%
mutate(across(everything(),
~ case_when(str_detect(., "^\\.+$")|. == "" ~ NA_character_,
TRUE ~ as.character(.)))) %>%
type.convert(as.is = TRUE) %>%
unite(name, V1, V2, V3, na.rm = TRUE, sep = " ") %>%
transmute(name, salary = invoke(coalesce, across(V4:V6)))

-输出

              name salary
1 Vinnie Del Negro 150000
2 Moses Malone 75000
3 Kevin Willis 150000
4 Joe Barry Carrol 750000
5 Doc Rivers 230000
6 Antoine Carr 85000
7 Hot Rod Williams 45000

数据

df1 <- structure(list(V1 = c("Vinnie", "Moses", "Kevin", "Joe", "Doc", 
"Antoine", "Hot"), V2 = c("Del", "Malone", "Willis", "Barry",
"Rivers", "Carr", "Rod"), V3 = c("Negro", ".....", "......",
"Carrol", "....", "......", "Williams"), V4 = c(".....", "",
"150000", ".....", "", "85000", "..."), V5 = c("150000", "75000",
"", "", "", "", ""), V6 = c("", "", "", "750000", "230000", "",
"45000")), row.names = c(NA, -7L), class = "data.frame")

关于r - 根据数据帧包含的字符类型将其合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69746278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com