提问人:Shawn Brar 提问时间:2/21/2022 更新时间:2/21/2022 访问量:37
用重复的数据填充实际数据并删除重复的数据
Fill the actual data with duplicated data and remove duplicated data
问:
我有以下数据:-
library(data.table)
data <- data <- data.table(address = c("AA", "BB", "AA", "CC", "DD", "EE", "DD"),
revenue = c(NA, 121, 22, 33, 44, 33, NA),
castord = c(21, 22, NA, 3, NA, 223, 33),
versaze = c(NA, 22, 124, 33, NA, 44, 43))
data
# address revenue castord versaze
# 1: AA NA 21 NA
# 2: BB 121 22 22
# 3: AA 22 NA 124
# 4: CC 33 3 33
# 5: DD 44 NA NA
# 6: EE 33 223 44
# 7: DD NA 33 43
现在这个数据已经和es重复了。它们的第一次出现有一些数据,如您在行中看到的那样。我想做的是使用这些 es 的重复行来填充此数据。如果重复的行具有 NA 值,则 NA 不应替换首次出现的行中的值。这将为我提供以下数据:-AA
DD
address
NA
1
5
address
data <- data.table(address = c("AA", "BB", "AA", "CC", "DD", "EE", "DD"),
revenue = c(22, 121, 22, 33, 44, 33, NA),
castord = c(21, 22, NA, 3, 33, 223, 33),
versaze = c(124, 22, 124, 33, 43, 44, 43))
# address revenue castord versaze
# 1: AA 22 21 124
# 2: BB 121 22 22
# 3: AA 22 NA 124
# 4: CC 33 3 33
# 5: DD 44 33 43
# 6: EE 33 223 44
# 7: DD NA 33 43
然后删除那些重复的行:-
data <- data.table(address = c("AA", "BB", "CC", "DD", "EE"),
revenue = c(22, 121, 33, 44, 33),
castord = c(21, 22, 3, 33, 223),
versaze = c(124, 22, 33, 43, 44))
# address revenue castord versaze
# 1: AA 22 21 124
# 2: BB 121 22 22
# 3: CC 33 3 33
# 4: DD 44 33 43
# 5: EE 33 223 44
答:
1赞
John Nielsen
2/21/2022
#1
如果使用 和 where 则取第一个未使用的值,则第一行为 。dplyr::group_by
summarise
NA
na.omit
NA
data <- data %>% group_by(address) %>%
summarise(
revenue = first(na.omit(revenue)),
castord = first(na.omit(castord)),
versaze = first(na.omit(versaze))
)
评论
0赞
Shawn Brar
2/21/2022
有没有办法做到这一点?data.table
0赞
John Nielsen
2/21/2022
我不知道,我也无法浏览他们的文档。为什么使用 dplyr/tidyverse 有问题?
0赞
Shawn Brar
2/21/2022
实际上,我拥有的实际表非常大,约为 900 mb,我想用它来尽可能提高内存效率。data.table
3赞
zx8754
2/21/2022
#2
使用 data.table,按地址分组,遍历列,删除 NA,获取第一个值:
data[, lapply(.SD, function(i) (na.omit(i)[ 1 ])), by = address]
# address revenue castord versaze
# 1: AA 22 21 124
# 2: BB 121 22 22
# 3: CC 33 3 33
# 4: DD 44 33 43
# 5: EE 33 223 44
评论