R语言中用户名变为行号如何修复?保留原用户名的代码调整
问题:处理数据框时丢失行名(用户名)
我用dplyr::bind_rows生成了Offense.Passing.Stats数据框,初始视图里行名是MonsterWyatt、rvmo这类用户名,但执行bind_rows、gather、na.omit处理后,行名变成了行号,原用户名全部丢失。试过其他过滤方法没用,求代码修复,让处理后的数据保留用户名。
初始数据状态
初始
Offense.Passing.Stats视图:| Touchdowns | Interceptions | | <int> | <int> | | -------- | -------- | MonsterWyatt...1 | 3 | NA | rvmo...2 | 3 | NA | MonsterWyatt...3 | NA | 4 | rvmo...4 | NA | 4 |
出错的代码
library(tidyverse) Offense.Passing.Stats = Offense.Passing.Stats %>% bind_rows() %>% gather(statistic, value, "Touchdowns":"Passing.Yards") %>% na.omit() View(Offense.Passing.Stats)
处理后丢失用户名的结果
处理后视图:
| statistic | value | | <chr> | <int> | 1 | Touchdowns | 3 | 2 | Touchdowns | 3 | 18 | Interceptions | 4 | 19 | Interceptions | 4 |
修复方案
核心问题是tidyverse的函数默认不会保留行名,所以需要先把行名转换成数据框的一列,再进行后续处理:
library(tidyverse) Offense.Passing.Stats = Offense.Passing.Stats %>% # 第一步:把行名提取为单独的列,命名为username rownames_to_column(var = "username") %>% bind_rows() %>% gather(statistic, value, "Touchdowns":"Passing.Yards") %>% na.omit() %>% # 可选:清理用户名里的...1这类自动添加的后缀 mutate(username = str_remove(username, "\\.\\.\\.\\d+$")) View(Offense.Passing.Stats)
修复后结果
处理后保留用户名的视图:
| username | statistic | value | | <chr> | <chr> | <int> | 1 | MonsterWyatt | Touchdowns | 3 | 2 | rvmo | Touchdowns | 3 | 3 | MonsterWyatt | Interceptions | 4 | 4 | rvmo | Interceptions | 4 |
关键说明
rownames_to_column(var = "username"):这是保留用户名的核心步骤,把原本作为行名的用户名转换成数据框的一列,后续所有操作都会保留这列数据。str_remove部分:如果你的用户名后面带有...1这类自动生成的后缀,可以用这行代码清理掉;如果没有后缀,直接删掉这行即可。
内容的提问来源于stack exchange,提问作者JMaestro
相关产品推荐
相关产品推荐

