【问题标题】:Extract the part of a variable value before '_'提取变量值在“_”之前的部分
【发布时间】:2023-04-04 23:20:01
【问题描述】:

我的数据如下所示:

Linking <- data.frame(
  ID = c(round((runif(20, min=10000, max=99999)), digits=0), rep(NA,10)),
  PSU = c(paste("A", round((runif(20, min=10000, max=99999)), digits = 0), sep = ''), rep(NA,10)),
  qtr = c(rep(1:10, 2), rep(NA,10)), 
  date = rep("13/04/56", 30),
  Direct = rep(c('D','M','U','U','M'), 6),
  stringsAsFactors = F)

Linking$Key <- paste(Linking$ID, Linking$PSU, Linking$qtr, sep='_')
Linking$Key[c(21:30)] <- c("87654_A15467_1", "45623_A23456_2", "67891_A12345_4", "65346_A23987_7", 
                       "E3456782_A456321_6", "E3421986_A34564_8", "E9859873_A123456_9", "E3452_A12345_6", "R765498765_A455634_2", "54678_A12345_5")

我想提取“Key”变量的单独部分,以填充 ID、PSU 和 qtr,其中这些值为 NA。

我可以使用这个代码:

 test <- filter(Linking, is.na(ID)) %>%
 select(Key)
 test2 <- data.frame(do.call(rbind, strsplit(test$Key, "_")), test$Key)
 names(test2) <- c("ID", "PSU", "qtr", "Key")

提取我需要的 ID、PSU 和 qtr 信息,其中有 NA 值。但是如何将其添加回原始数据集“链接”?合并不起作用,因为我最终会得到两个 PSU、ID 和 qtr 值(N 和实际值)

我在这里问了一个类似的问题 Populate the NA values in a variable with values from a different variables in R ,但是这个问题包括可变长度值,并且包括一个更完整的数据集,其中的变量不仅与“键”相关。谢谢。

【问题讨论】:

  • 从标题中删除了不必要的要求“使用 substr”。 strsplit 及其矢量化版本 stringr::str_split 更好。从标签中删除了na

标签: ruby-on-rails string substr strsplit


【解决方案1】:

这是一种方法:

tmp <- data.frame(do.call(rbind, strsplit(Linking$Key, "_")), Linking$Key)
names(tmp) <- names(Linking)
tmp

因为Linking$Key 包含用于创建您的data.frame 的所有相关数据,所以此方法有效。

【讨论】:

  • 我已经用你的代码更新了我的问题,并更全面地了解了我正在使用的数据;再问一个问题。谢谢。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2013-10-20
  • 2015-02-08
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多