gpt4 book ai didi

r - 在R中的行组中向前和向后进行最后一个因子观察

转载 作者:行者123 更新时间:2023-12-04 00:06:39 24 4
gpt4 key购买 nike

假设我的数据集看起来像

ID Name 
1 JAY
1
1 JAY
2 LAY
2 LAY
2
3 NA
3 KAY
3

我想根据组中已有的观察结果用缺失值(空或 NA)填充行。所以生成的数据框看起来像

ID Name 
1 JAY
1 JAY
1 JAY
2 LAY
2 LAY
2 LAY
3 KAY
3 KAY
3 KAY

我尝试使用 na.locf 但它不适用于非数值。

DF1 = setDT(DF)[,  N := na.locf(na.locf(Name(NA_real_^!Name),na.rm=FALSE), fromLast=TRUE, na.rm=FALSE), ID][is.na(N), N := 0]

最佳答案

一个选项是在按“ID”分组后,将不是 NA 且不是空白 (nzchar(Name)) 的“名称”子集,获取最后一个观察 (tail(...)) 并将 (:=) 分配给 'Name'。

setDT(DF)[, Name := tail(Name[!is.na(Name) & nzchar(Name)], 1), by = ID]
DF
# ID Name
#1: 1 JAY
#2: 1 JAY
#3: 1 JAY
#4: 2 LAY
#5: 2 LAY
#6: 2 LAY
#7: 3 KAY
#8: 3 KAY
#9: 3 KAY

如果“名称”列是 factor,则将 nzchar(Name) 更改为 nzchar(as.character(Name))


或者在'i'中指定逻辑向量,并在分组后将最后一个观察值(Name[.N])分配(:=)给'Name' “身份证”

setDT(DF)[!is.na(Name) & nzchar(Name), Name := Name[.N], ID]

注意:要使第二种解决方案起作用,“名称”应该是 character 类。

关于r - 在R中的行组中向前和向后进行最后一个因子观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479001/

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