gpt4 book ai didi

r - 提取在单个列中找到的数据元素

转载 作者:行者123 更新时间:2023-12-04 10:15:31 24 4
gpt4 key购买 nike

这是我的数据的样子。

id interest_string
1 YI{Z0{ZI{
2 ZO{
3 <NA>
4 ZT{

如您所见,可以将多个代码串联成一列,用 { 分隔。一行也可能没有 interest_string值。

如何操作此数据框以将值提取为如下格式:
id  interest
1 YI
1 Z0
1 ZI
2 Z0
3 <NA>
4 ZT

我需要使用 R 完成此任务.

提前致谢。

最佳答案

这是一种解决方案

out <- with(dat, strsplit(as.character(interest_string), "\\{"))
## or
# out <- with(dat, strsplit(as.character(interest_string), "{", fixed = TRUE))

out <- cbind.data.frame(id = rep(dat$id, times = sapply(out, length)),
interest = unlist(out, use.names = FALSE))

给予:
R> out
id interest
1 1 YI
2 1 Z0
3 1 ZI
4 2 ZO
5 3 <NA>
6 4 ZT

解释

解决方案的第一行简单地拆分 interest_string 的每个元素数据对象中的因素 dat , 使用 \\{作为分割指标。该指标必须被转义,并且在 R 中需要两个 \ . (实际上,如果您在对 fixed = TRUE 的调用中使用 strsplit,则不会。)结果对象是一个列表,对于示例数据,它看起来像这样
R> out
[[1]]
[1] "YI" "Z0" "ZI"

[[2]]
[1] "ZO"

[[3]]
[1] "<NA>"

[[4]]
[1] "ZT"

我们在此列表中拥有几乎所有我们需要的东西来形成您需要的输出。在这个列表之外,我们唯一需要的是 id引用 out 的每个元素的值,我们从原始数据中获取。

因此,在第二行中,我们按列绑定(bind)(指定数据框方法,以便我们获得返回的数据框)原始 id值,每个重复所需的次数,到 strsplit列表( out)。通过取消列出此列表,我们将其解包为一个向量,该向量具有您预期输出所给定的所需长度。我们得到我们需要复制每个 id 的次数 strsplit 返回的列表的组成部分的长度值.

关于r - 提取在单个列中找到的数据元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431966/

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