我正在读取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)
。
我已经尝试过很容易找到方法,但我似乎找不到任何方法。
任何人都可以帮我吗?非常感谢!
答案 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>