使用 R 和 tidyr() 从 NA 中提取文本
Posted
技术标签:
【中文标题】使用 R 和 tidyr() 从 NA 中提取文本【英文标题】:Extracting text from NAs using R and tidyr() 【发布时间】:2016-01-14 01:22:50 【问题描述】:我在一个数据框中有四列数据。这些列根据北/南/东/西拆分指定记录(行)是否位于伦敦的 4 个不同部分(没有记录出现在多于一个列中),因此(其中第一行是列标题) :
North South East West
NA South NA NA
NA NA East NA
North NA NA NA
我想将这些用作图表中的一个因素,所以我使用 tidyr 将它们连接起来
LondonNew <- unite(London,"adminarea",North:West,sep="",remove=FALSE)
,所以我现在有一个名为 adminarea 的附加列:
adminarea
NASouthNANA
NANAEastNA
NorthNANANA
我在 tidyr() 中找不到忽略 NA 的参数,我想知道这是否可能?最坏的情况,有人可以帮助我使用一个简单的附加正则表达式/str_extract 来帮助我将 North、South、East 或 West 四个单词提取到单独的列中吗?
目标是:
adminarea
South
East
North
非常感谢您的帮助。
【问题讨论】:
使用 LondonNew$adminarea 在这种情况下它会起作用,但如果文本的其他部分也具有有效的 NA,则并非总是如此。 这是矩阵索引的经典案例 -dat[cbind(seq_len(nrow(dat)),max.col(!is.na(dat)))]
将一次性完成所有 unite
加上 NA
的删除。
另一个选项,如果它适合您的用例,是首先用空字符串替换 NA。示例:London[is.na(London)] <- ''
然后运行 LondonNew <- unite(London,"adminarea",North:West,sep="",remove=FALSE)
【参考方案1】:
尝试使用:
LondonNew$adminarea <- gsub('NA', '', LondonNew$adminarea)
由于组合字符串的特殊性质,这将起作用。如果 NA 是该列中的有效字符序列,则不会。
【讨论】:
以上是关于使用 R 和 tidyr() 从 NA 中提取文本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tidyr::replace_na 替换数据框中的所有 NA? [复制]
R:提取具有NA的行,删除那些满足条件A并取那些满足条件B的平均值
R语言使用tidyr包的spread函数将dataframe数据从长表变换为宽表(long format to wide format)