gpt4 book ai didi

r - 使用来自另一列的位置对数据表中的字符串列进行子集化

转载 作者:行者123 更新时间:2023-12-03 18:19:15 25 4
gpt4 key购买 nike

我有一个数据表,其中包含以下类型的多列:

   attr1 attr2
1: 01001 01000
2: 11000 10000
3: 00100 00100
4: 01100 01000

DT = setDT(structure(list(attr1 = c("01001", "11000", "00100", "01100"),
attr2 = c("01000", "10000", "00100", "01000")), .Names = c("attr1",
"attr2"), row.names = c(NA, -4L), class = "data.frame"))

所有列都是字符串而不是数字。
我想实现以下目标:

1)我想找到“1”出现在attr1的字符串中的位置

2)在这些位置取attr2的值

在这种情况下,我的结果是:
[1] "10" "10" "1"  "10"

作为第一行中的示例,attr1 在位置 2 和 5 中具有“1”,我将 attr2 的第一行在位置 2 和 5 中进行子集化,最终得到“10”。

我想做的是对列进行拆分,然后使用它,但我真的希望有更好的方法。

最佳答案

您可以使用@alistaire 的 regmatches 的变体回答,因为还有替换功能regmatches<- .所以,而不是提取 1值,替换 0值与 "" :

dt[, matches := `regmatches<-`(attr2, gregexpr("0+", attr1), value="")]

# attr1 attr2 matches
#1: 01001 01000 10
#2: 11000 10000 10
#3: 00100 00100 1
#4: 01100 01000 10

您的想法到 strsplit并且比较也是可行的:
dt[, matches := mapply(function(x,y) paste(y[x==1],collapse=""), strsplit(attr1,""), strsplit(attr2,""))]

关于r - 使用来自另一列的位置对数据表中的字符串列进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380384/

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