gpt4 book ai didi

r - 在 r 中将元素从一列移动到另一列

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

我有一个看起来像这样的数据框(但针对美国的每个县)

<表类="s-表"><头>县状态n_state_1n_state_2n_state_3n_state_4<正文>奥托加县铝不适用佛罗里达州不适用不适用鲍德温县铝GA不适用TN不适用卡特伦县铝佛罗里达州GA不适用加拿大

我想将非缺失值(FL、GA、TN 等)移动到从 n_state_1 开始的第一列,然后删除仅包含缺失值的列以获取:

<表类="s-表"><头>县状态n_state_1n_state_2n_state_3<正文>奥托加县铝佛罗里达州不适用不适用鲍德温县铝GATN不适用卡特伦县铝佛罗里达州GA加拿大

我正在为迈出第一步而苦苦挣扎。我考虑过使用 distinct 函数,但它不起作用,因为每列中都有非空元素。

最佳答案

你可以使用 dplyrtidyr :

library(dplyr)
library(tidyr)

df %>%
pivot_longer(starts_with("n_state")) %>%
drop_na() %>%
group_by(county, state) %>%
mutate(name=row_number()) %>%
pivot_wider(names_prefix="n_state_")

返回

  county         state n_state_1 n_state_2 n_state_3
<chr> <chr> <chr> <chr> <chr>
1 Autauga_County AL FL NA NA
2 Baldwin_County AL GA TN NA
3 Catron_County AL FL GA CA

这里发生了什么?

  • pivot_longer需要 n_state_{n} -列并将它们折叠成两列:name -column 包含原始列名称( n_state_1n_state_2 等), value -列包含状态(在许多情况下为 FLGA<NA>)。
  • 接下来我们删除每个 <NA>入口。 (注意:我使用 <NA> 来表明它是一个 NA 值。)
  • county 分组后和 state我们添加一个行号。这些数字稍后将用于创建新的列名称。
  • pivot_wider现在获取这些行号并在它们前面加上 n_state_ 前缀获取新列。这些值取自 value - 在第二行代码中创建的列。 pivot_wider<NA> 填充缺失值-值(默认行为)。

数据

structure(list(county = c("Autauga_County", "Baldwin_County", 
"Catron_County"), state = c("AL", "AL", "AL"), n_state_1 = c(NA,
"GA", "FL"), n_state_2 = c("FL", NA, "GA"), n_state_3 = c(NA,
"TN", NA), n_state_4 = c(NA, NA, "CA")), problems = structure(list(
row = 3L, col = "n_state_4", expected = "", actual = "embedded null",
file = "literal data"), row.names = c(NA, -1L), class = c("tbl_df",
"tbl", "data.frame")), class = c("spec_tbl_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -3L), spec = structure(list(
cols = list(county = structure(list(), class = c("collector_character",
"collector")), state = structure(list(), class = c("collector_character",
"collector")), n_state_1 = structure(list(), class = c("collector_character",
"collector")), n_state_2 = structure(list(), class = c("collector_character",
"collector")), n_state_3 = structure(list(), class = c("collector_character",
"collector")), n_state_4 = structure(list(), class = c("collector_character",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1L), class = "col_spec"))

关于r - 在 r 中将元素从一列移动到另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68247418/

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