R将空格分离的数据帧元素转换为矢量

时间:2015-03-04 07:14:43

标签: r csv dataframe

我正在读取csv文件animals.csv

type,kid,traits
dog,puppy,1 2 3 4 5
cat,kitten,6 7 8 9 10

使用

将整个文件读入数据框后

animals = read.csv('animals.csv', header=TRUE)

唯一的问题是对于列特征,每个元素都是一个字符串。我需要它们是整数的向量,例如。 c(1,2,3,4,5) c(6,7,8,9,10)

我已经尝试过很容易找到方法,但我似乎找不到任何方法。

任何人都可以帮我吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

只需使用strsplit

> animals$traits <- lapply(strsplit(as.character(animals$traits), " "), as.numeric)
> animals
  type    kid         traits
1  dog  puppy  1, 2, 3, 4, 5
2  cat kitten 6, 7, 8, 9, 10
> str(animals)
'data.frame':   2 obs. of  3 variables:
 $ type  : Factor w/ 2 levels "cat","dog": 2 1
 $ kid   : Factor w/ 2 levels "kitten","puppy": 2 1
 $ traits:List of 2
  ..$ : num  1 2 3 4 5
  ..$ : num  6 7 8 9 10

尽管如此,这可能是一个有点混乱的结构。

相反,我建议从我的&#34; splitstackshape&#34;中查看cSplit。包,它将以更容易使用的格式为您提供所需的数据:

library(splitstackshape)
cSplit(animals, "traits", " ")  ## Start with the original dataset
#    type    kid traits_1 traits_2 traits_3 traits_4 traits_5
# 1:  dog  puppy        1        2        3        4        5
# 2:  cat kitten        6        7        8        9       10
cSplit(animals, "traits", " ", direction = "long")
#     type    kid traits
#  1:  dog  puppy      1
#  2:  dog  puppy      2
#  3:  dog  puppy      3
#  4:  dog  puppy      4
#  5:  dog  puppy      5
#  6:  cat kitten      6
#  7:  cat kitten      7
#  8:  cat kitten      8
#  9:  cat kitten      9
# 10:  cat kitten     10
str(.Last.value)
# Classes ‘data.table’ and 'data.frame':  10 obs. of  3 variables:
#  $ type  : Factor w/ 2 levels "cat","dog": 2 2 2 2 2 1 1 1 1 1
#  $ kid   : Factor w/ 2 levels "kitten","puppy": 2 2 2 2 2 1 1 1 1 1
#  $ traits: int  1 2 3 4 5 6 7 8 9 10
#  - attr(*, ".internal.selfref")=<externalptr>