我的问题
我的data.frame
是174,792个障碍物。 2个变量。我希望在列中找到一个字符串,然后根据内容,插入一个包含相应字符串的新列。
如果我使用iris
数据集......
示例
Species <- c("Setosa","Versicolor","Virginica")
Position <- c("Yard","Garden","Wild")
我想迭代Species
列,对于每个物种,在右边创建一个包含该物种指定的Position
的列。例如,我的数据集现在看起来像:
的 data.frame(iris)
的 Species, Position
Setosa, Yard
{
{1}}
Versicolour, Garden
Setosa, Yard
我所尝试的内容
我已尝试Virginica, Wild
并重复iris$Position <- ifelse(grepl("Setosa", iris$Species, ignore.case = T), "Yard"
语句,将每个grepl
及其Specie
替换为Position
,尽管R让我回复了以下错误...
{{1我出错的地方和/或是否有比上述更简洁的代码?
非常感谢。
答案 0 :(得分:1)
这对于命名向量来说是完美的,但是为了使它能够处理内置的iris
数据集,你需要匹配这个案例,所以我已经让你的物种变换了全部小写(因为这个方法没有ignore.case
参数):
Species <- c("setosa","versicolor","virginica")
Position <- c("Yard","Garden","Wild")
named.pos = Position
names(named.pos) = Species
iris$position = named.pos[iris$Species]
至于你的错误,这是一个语法错误,这意味着你在某个地方错过了"
,但原则上你的想法也可以正常工作。它有点矫枉过正,因为grepl
用于在字符串中搜索。由于您匹配整个字符串,因此您只需使用==
,例如
iris$position = ifelse(iris$Species == "setosa", "Yard",
ifelse(iris$Species == "versicolor", "Garden", "Wild"))
答案 1 :(得分:1)
levels(iris$Species)
#[1] "setosa" "versicolor" "virginica"
由于“物种”的levels
与替换矢量(“位置”)的顺序相同,您可以使用factor
并将labels
指定为“位置”。
iris1 <- transform(iris, position=as.character(factor(Species,
labels=Position)))