r - 将许多列的内容放在一个新的单列中
问题描述
感谢您对我上一个问题的回答,但我需要更新它,因为这些解决方案不适用于我的真实示例,即 3170x11 数据框。
让我简要回顾一下。我有一个 3170X11 数据框,其中填充了“Normale”、“Delezioni”或 NA 等术语。我想将列结果合并到一个新列中,报告报告的术语类型,即确实是“Normale”、“Delezioni”或“NA”。如果“正常”和“NA”出现在同一行,则应报告“正常”。如果“Delezioni”和“NA”出现在同一行,则应报告“Delezioni”。如果仅存在“NA”,则应报告“NA”。但是,如果“Normali”和“Delezioni”都存在,则应报告“错误”。Akrun 和其他人报告了一个很好的解决方案(将许多列合并为一列),但是,正如我所说,没有
library (RCurl)
a <- getURL('http://download1645.mediafire.com/pp9z3okh5tgg/96px8ophovxrxe9/example.tab')
df2 <- read.table(text=a,header=TRUE, sep = "\t")
df2 <- data.frame(lapply(df2, as.character), stringsAsFactors=FALSE) #converts from factor to character
res <- df2 %>%
mutate_if(~ all(is.na(.)) && is.logical(.), ~ NA_character_) %>%
transmute(Summary = case_when(rowSums(!is.na(.)) > 1 ~ "Error",
TRUE ~ coalesce(!!! .)))
res 包含几个错误。例如,第一行应该是:
Summary
1 Normale
2 <NA>
3 <NA>
4 <NA>
5 Normale
6 Normale
相反,它们是:
> head (res)
Summary
1 Error
2 <NA>
3 <NA>
4 <NA>
5 Error
6 Error
谢谢
解决方案
以下对我有用,链接中的数据集。
f1 <- function(x){
y <- unique(x[!is.na(x)])
if(length(y) == 0)
NA
else if(length(y) == 1)
y
else "Error"
}
df2$Summary <- apply(df2, 1, f1)
并且不需要外部包,仅基于 R。
推荐阅读
- apache-kafka - 为什么我无法使用 Zookeeper 删除主题?
- c# - 使用 Nodatime 四舍五入到最近的一天
- javascript - 使用 laravel foreach 发送 ajax 请求
- wso2 - WSO2 EI 6.4.0 警告消息
- ios - 在 iOS 开发中使用回调函数时在 Kotlin/Native 框架中检测到内存泄漏
- android - 从 Firebase 控制台向所有设备发送推送通知时出现问题
- python - 如何在 Windows 10 上安装支持 CUDA 的 pytorch 1.2.0?
- c# - EF Core 忽略 ModelMetadataType
- excel - 比较两个工作表并突出显示差异:运行时错误 457 - 此键已与此集合的元素相关联
- c - 函数只工作 1 次