从一组字符串生成数据框

时间:2014-08-01 08:59:36

标签: r dataframe

我在文件中有一组字符串:

  • SAMSUNG LCD TV40 B450
  • 小型14英寸WEGASONIC TVS
  • SOINY液晶电视22 T400A
  • 索尼BRAVIA TV32 T550
  • SONY BRAVIA TV40 S530
  • SONY BRAVIA TV40 S530
  • 索尼BRAVIA TV42 S530A
  • 索尼BRVIA TV32 S550A
  • 索尼液晶电视19 T400A
  • SONY液晶电视22 BX300
  • 索尼液晶电视22 T400A
  • 索尼液晶电视22 T400A
  • 索尼液晶电视22 T550
  • 索尼液晶电视26 BX300
  • 索尼液晶电视32 BX300
  • 索尼液晶电视TVV19 BX300
  • STAR TV 21 MODEL 2103P
  • TELESTAR 14 1486 COLOR TV
  • TELESTAR TV 14 1486
  • TELESTAR TV 14 1486

我需要将这些字符串转换为数据框,其中上面列表中的每个唯一字都成为列名。有什么建议吗?

2 个答案:

答案 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)

不完全确定你想要什么。此外,您还有SOINYSONYTVnumber之间的空格。希望在您的实际数据集中不是这种情况。

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.