我在文件中有一组字符串:
我需要将这些字符串转换为数据框,其中上面列表中的每个唯一字都成为列名。有什么建议吗?
答案 0 :(得分:1)
假设您的字符串是按向量组织的,并且您实际上想要为每个唯一字词添加一列,您可以执行以下操作。
strVec <- c("SONY BRAVIA TV32 T550","SONY BRAVIA TV40 S530","SONY BRAVIA TV40 S530","SONY BRAVIA TV42 S530A")
words <- sapply(strVec,FUN=function(x) strsplit(x," ")) #split strings at " "
uniqueWords <- unique(unlist(words)) # get the unique words
mydf <- data.frame(matrix(nrow=0,ncol=length(uniqueWords))) # create new df
colnames(mydf) <- uniqueWords # give it the right colnames
答案 1 :(得分:1)
不完全确定你想要什么。此外,您还有SOINY
和SONY
,TV
和number
之间的空格。希望在您的实际数据集中不是这种情况。
Lines <- readLines(n=20)
SAMSUNG LCD TV40 B450
SMALL 14 INCH WEGASONIC TVS
SONY LCD TV22 T400A
SONY BRAVIA TV32 T550
SONY BRAVIA TV40 S530
SONY BRAVIA TV40 S530
SONY BRAVIA TV42 S530A
SONY BRVIA TV32 S550A
SONY LCD TV19 T400A
SONY LCD TV22 BX300
SONY LCD TV22 T400A
SONY LCD TV22 T400A
SONY LCD TV22 T550
SONY LCD TV26 BX300
SONY LCD TV32 BX300
SONY LCD TVV19 BX300
STAR TV 21 MODEL 2103P
TELESTAR 14 1486 COLOUR TV
TELESTAR TV 14 1486
TELESTAR TV 14 1486
library(stringr)
Lines <- str_trim(Lines) #removes trailing and leading spaces
Un <- unique(scan(text=Lines, what="")) #extractunique words
res <- sapply(Un, function(.pat) grepl(.pat, Lines)) +0
res[1:3,1:3]
# SAMSUNG LCD TV40
#[1,] 1 1 1
#[2,] 0 0 0
#[3,] 0 1 0
as.data.frame(res) #converts to dataframe.