R编程:根据另一列中的值从拆分字符串中选择元素

时间:2016-06-10 14:41:44

标签: r

我有一个包含一列单词的数据框,其中音节用连字符分隔。我想提取第n个音节,其中n在另一列中给出。像这样:

word <- c("to-ma-to", "cheese", "ta-co")
whichSyl <- c(2, 1, 1)
mydf <- data.frame(word, whichSyl)
mydf$word <- as.character(mydf$word)

所需:包含

的载体
ma
cheese
ta

如果这是,比方说,awk,我会做

'{split($1,a,"-"); print a[$2]}'

单词并不总是具有相同数量的音节。

似乎有一种直截了当的方法可以做到这一点,但我没有看到它。感谢

3 个答案:

答案 0 :(得分:3)

您可以使用mapplystrsplit来获取

mapply('[', strsplit(mydf$word, '-'), whichSyl)
#[1] "ma"     "cheese" "ta"

答案 1 :(得分:1)

在这里,我编写了一个一次执行一行的函数,然后使用lapply()迭代所有行,do.call(rbind())将所有这些响应绑定在一起。

getSyl <- function(i){
  strsplit(mydf$word[i], '-')[[1]][mydf$whichSyl[i]]
}
do.call(rbind, lapply(1:nrow(mydf), getSyl))


     [,1]    
[1,] "ma"    
[2,] "cheese"
[3,] "ta" 

答案 2 :(得分:1)

我们可以使用read.table和行/列索引

read.table(text=mydf$word, sep="-", header=FALSE,
                fill=TRUE)[cbind(1:nrow(mydf), mydf$whichSyl)]
#[1] "ma"     "cheese" "ta"