我有一个以下格式的数据文件
id col1 col2 col3
1 abc abc2
2 abc abc3 abc2
3 abc2
我想将其转换为以下内容:
id abc abc2 abc3
1 TRUE TRUE FALSE
2 TRUE TRUE TRUE
3 FALSE TRUE FALSE
如何使用R(或其他任何东西)执行此操作?任何帮助将不胜感激。
答案 0 :(得分:2)
您也可以
library(dplyr)
library(tidyr)
df1 <- df %>%
gather(Var, Val, col1:col3) %>%
filter(grepl('[^ ]+', Val)) %>%
spread(Val, Var)
df1[,-1] <- !is.na(df1[,-1])
df1
# id abc abc2 abc3
#1 1 TRUE TRUE FALSE
#2 2 TRUE TRUE TRUE
#3 3 FALSE TRUE FALSE
df <- data.frame(col1= c('abc', 'abc', 'abc2'),
col2= c('abc2', 'abc3', ' '), col3=c(' ', 'abc2', ''))
答案 1 :(得分:1)
df <- data.frame(col1=c('abc','abc','abc2'),
col2=c('abc2','abc3',''),
col3=c('','abc2','') )
df != ''
col1 col2 col3
[1,] TRUE TRUE FALSE
[2,] TRUE TRUE TRUE
[3,] TRUE FALSE FALSE
答案 2 :(得分:1)
df <- data.frame(col1=c('abc','abc','abc2'),
col2=c('abc2','abc3',''),
col3=c('','abc2','') )
lev <- unique(unlist(df))
lev <- lev[ lev != '']
output <- t(apply(df, 1, function(x) lev %in% x))
dimnames(output) <- list(id = rownames(df), lev)
这应该给出你期望的结果:
output
id abc abc2 abc3
1 TRUE TRUE FALSE
2 TRUE TRUE TRUE
3 FALSE TRUE FALSE