gpt4 book ai didi

string - 数据帧切片

转载 作者:行者123 更新时间:2023-12-02 11:31:58 26 4
gpt4 key购买 nike

我希望这个问题对于这个委员会来说不会太简单。

我创建了一个data.frame df:

       CAS        Name        CID
89 13010-47-4 Lomustine 3950
90 130209-82-4 Latanoprost 5311221,5282380,46705340,3890
91 130636-43-0 Nifekalant 268083
92 130929-57-6 Entacapone 5281081

和一个向量 vec

[1] 5282380 18471829 45923789 44308022 44266812 24883465 24867475 24867460

我想提取 df 中包含任意数量的 vec 的行。我尝试通过以下代码解决这个问题:

 df$GC[(df$CID %in% vec)] = 1

df[df$GC==1,]

但此解决方案的问题是,我只能获取 CID 列中仅包含一个数字的行。不会出现在 CID 中包含多个值(如第 90 行)的行。

这个问题有一个优雅的解决方案吗?

提前致谢

最佳答案

考虑到您对 EDi 答案的评论(我喜欢),我想我应该提出建议。

将逗号分隔值压缩到数据框的单列中是很尴尬的,并且(根据我的经验)只会导致挫败感。我经常发现将其保存在单独的数据结构(列表)中更简单:

dat <- read.table(text = "       CAS        Name        CID
13010-47-4 Lomustine 3950
130209-82-4 Latanoprost 5311221,5282380,46705340,3890
130636-43-0 Nifekalant 268083
130929-57-6 Entacapone 5281081",sep = "",header = TRUE)

cid <- sapply(dat$CID,strsplit,",",USE.NAMES = FALSE)

在这种形式下,事情通常更容易处理:

ID <- c(5282380, 18471829, 45923789, 44308022, 44266812, 24883465, 24867475, 24867460, 3950)
dat[sapply(cid,function(x) {any(x %in% as.character(ID))}),]
CAS Name CID
1 13010-47-4 Lomustine 3950
2 130209-82-4 Latanoprost 5311221,5282380,46705340,3890

如果您担心顺序发生变化,您始终可以使用 dat 中的行名称和列表名称来保持每个项目的正确性。

(另请注意,我的匿名函数假设 R 的作用域规则最终会找到 ID;如果您愿意,您可以更改该函数以显式传入 ID .)

关于string - 数据帧切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713104/

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