gpt4 book ai didi

使用列本身中的文本重命名数据框列

转载 作者:行者123 更新时间:2023-12-04 10:47:48 25 4
gpt4 key购买 nike

给定一个具有格式的(简化的)数据框

df <- data.frame(a = c(1,2,3,4), 
b = c(4,3,2,1),
temp1 = c("-","-","-","foo: 3"),
temp2 = c("-","bar: 10","-","bar: 4")
)

a b temp1 temp2
1 4 - -
2 3 - bar: 10
3 2 - -
4 1 foo: 3 bar: 4

我需要用列中包含的名称重命名所有临时列,我的最终目标是这样结束:

a  b    foo      bar
1 4 - -
2 3 - 10
3 2 - -
4 1 3 4

df 列名称和其中包含的数据将是未知的,但是需要更改的列将包含 temp 并且分隔符将始终是“:”

因此,我可以像这样使用 dplyr 轻松地从列中删除名称:

df <- df %>% 
mutate_at(vars(contains("temp")), ~(substr(., str_locate(., ":")+1,str_length(.))))

但首先我需要根据一些函数方法重命名列,该函数方法扫描列并返回其中的值,即。

rename_at(vars(contains("temp")), ~(...some function.....)) 

根据给出的示例,不能保证特定行会有数据,所以我不能简单地从第 1 行获取值

欢迎任何想法。提前致谢

最佳答案

涉及 dplyrtidyr 的一种可能性是:

df %>%
pivot_longer(names_to = "variables", values_to = "values", -c(a:b)) %>%
mutate(values = replace(values, values == "-", NA_character_)) %>%
separate(values, into = c("variables2", "values"), sep = ": ") %>%
group_by(variables) %>%
fill(variables2, .direction = "downup") %>%
ungroup() %>%
select(-variables) %>%
pivot_wider(names_from = "variables2", values_from = "values")

a b foo bar
<dbl> <dbl> <chr> <chr>
1 1 4 <NA> <NA>
2 2 3 <NA> 10
3 3 2 <NA> <NA>
4 4 1 3 4

如果你想用 - 进一步替换 NAs:

df %>%
pivot_longer(names_to = "variables", values_to = "values", -c(a:b)) %>%
mutate(values = replace(values, values == "-", NA_character_)) %>%
separate(values, into = c("variables2", "values"), sep = ": ") %>%
group_by(variables) %>%
fill(variables2, .direction = "downup") %>%
ungroup() %>%
select(-variables) %>%
pivot_wider(names_from = "variables2", values_from = "values") %>%
mutate_at(vars(-a, -b), ~ replace_na(., "-"))

a b foo bar
<dbl> <dbl> <chr> <chr>
1 1 4 - -
2 2 3 - 10
3 3 2 - -
4 4 1 3 4

关于使用列本身中的文本重命名数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468242/

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