我有一个包含一列单词的数据框,其中音节用连字符分隔。我想提取第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]}'
单词并不总是具有相同数量的音节。
似乎有一种直截了当的方法可以做到这一点,但我没有看到它。感谢
答案 0 :(得分:3)
您可以使用mapply
和strsplit
来获取
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"