gpt4 book ai didi

r - 填充数据框 R 中缺失的字符串值

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

我遇到了一些在 R 中一定很容易的事情;我想用相应的值填充(data.frame 的)列中的缺失值。所以像这样:

V1    V2  
cat tree
cat NA
NA tree
dog house
NA house
dog NA
horse NA
NA car
horse car

所以cat对应的字符串是tree,所以当“猫组”中有NA时,必须填写“tree”。当“dog group”中有 NA 时,必须填写“house”(因此我必须选择将列表的第一个单词 1 和 2 作为“前导”单词填写每个数字 - 编辑 - -> 如果 NA 是第一个,则第一个不领先会更好)。

V1中有很多NA,在V2中有一些,我只想填充V2中的NA。

在 SPSS 中它完成了聚合函数,但我不认为 R 中的聚合函数在这种情况下具有可比性,是吗?有人知道怎么做吗?

谢谢!

最佳答案

OP 要求需要按组 填写缺失值。因此,zoo::na.locf() 方法在这里可能会失败。

有一个名为update join 的方法可用于填充每组的缺失值:

library(data.table)   # version 1.10.4 used
setDT(DT)
DT[DT[!is.na(V1)][order(V2), .(fillin = first(V2)), by = V1], on = "V1", V2 := fillin][]
# V1 V2
# 1: 1 tree
# 2: 1 tree
# 3: 1 tree
# 4: 2 house
# 5: 2 house
# 6: 2 house
# 7: 3 lawn
# 8: 3 lawn
# 9: 4 NA
#10: 4 NA
#11: NA NA
#12: NA tree

请注意,已对输入数据进行了补充以涵盖一些特殊情况。

说明

该方法包括两个步骤。首先,确定要按组填充的值,然后是更新联接,它修改DT 就地

fill_by_group <- DT[!is.na(V1)][order(V2), .(fillin = first(V2)), by = V1]
fill_by_group
# V1 fillin
#1: 2 house
#2: 3 lawn
#3: 1 tree
#4: 4 NA

DT[fill_by_group, on = "V1", V2 := fillin][]

order(V2) 确保任何 NA 值最后排序,以便 first(V2) 选择正确的值来填充.

update join 方法已被评为最快的方法 in another case .

使用 na.omit() 的变体

docendo discimushis comment 中提出建议使用 na.omit()。这可以用于更新连接以及替换order()/first():

DT[DT[!is.na(V1), .(fillin = na.omit(V2)), by = V1], on = "V1", V2 := fillin][]

请注意 na.omit(V2)na.omit(V2)[1]first(na.omit(V2) ),在这里。

数据

编辑:OP 大幅更改了他最初发布的数据集。作为快速修复,我更新了下面的示例数据以包含 V1NA 的情况。

library(data.table)
DT <- fread(
"1 tree
1 NA
1 tree
2 house
2 house
2 NA
3 NA
3 lawn
4 NA
4 NA
NA NA
NA tree")

请注意,已对 OP 提供的数据进行了补充,以涵盖另外三种情况:

  • 每组中的第一个 V2 值为 NA
  • 组中的所有 V2 值为NA
  • V1 是 `NA.

关于r - 填充数据框 R 中缺失的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43521174/

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