gpt4 book ai didi

r - 在 Y 列数据的条件下转置 X 列数据

转载 作者:行者123 更新时间:2023-12-05 00:14:13 25 4
gpt4 key购买 nike

我有一个数据组织问题。我有看起来像这样的数据:

ROW   date      names
1 1.1.2000 A
2 NA B
3 NA C
4 1.1.2000 X
5 NA Y
6 2.1.2000 Z

我希望它看起来像这样:
ROW   date      name1 name2 name3 name4
1 1.1.2000 A B C NA
2 1.1.2000 X Y NA NA
3 2.1.2000 Z NA NA NA

所以代码应该检查“日期”列,当它找到一个日期时,它存储行号(ROW1)。然后,它将检查“日期”列的下一行,如果是“NA”值,程序将存储它们的行号(ROW y:x),直到最终找到下一个日期(不存储下一个日期行)。然后代码转到“名称”列中的 y:x 行,并将它们的数据移动到 ROW1 中的新列中。在此之后,代码对其在 y:x 行之后找到的下一个日期执行相同的过程。

ROW1 是否包含在 y:x 中对我来说并不重要,因为我已经在正确的行中拥有该数据。有多个相同的日期,正如您在我的示例中看到的那样,我需要将它们分开。

如果您能通过提及一些有用的功能来帮助我,那将很有帮助,因为我不知道如何开始。

最佳答案

library(dplyr)
library(tidyr)

df = read.table(text = "
ROW date names
1 1.1.2000 A
2 NA B
3 NA C
4 1.1.2000 X
5 NA Y
6 2.1.2000 Z
", header=T, stringsAsFactors=F)

df %>%
group_by(ROW = cumsum(!is.na(date))) %>% # create the rows of updated dataset based on rows without NAs; for each new row:
mutate(counter = row_number(), # count how many columns you need for each new row
date = unique(date[!is.na(date)])) %>% # keep unique date after excluding NAs
ungroup() %>% # forget the grouping
mutate(counter = paste0("name",counter)) %>% # update variable to use as column names
spread(counter, names) # reshape dataset

# # A tibble: 3 x 5
# ROW date name1 name2 name3
# * <int> <chr> <chr> <chr> <chr>
# 1 1 1.1.2000 A B C
# 2 2 1.1.2000 X Y <NA>
# 3 3 2.1.2000 Z <NA> <NA>

关于r - 在 Y 列数据的条件下转置 X 列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501735/

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