【问题标题】:extracting data from two columns从两列中提取数据
【发布时间】:2019-07-02 08:22:53
【问题描述】:

我有一个看起来像这样的数据框。 它指的是单词及其结构

df <- data.frame(word = c("pokkoitta", "demna", "ningatinggo ", "tengkeam", "bampana", "njam"), structure = c("CvC:vvC:v", "CvCCv", "CvCvCvNCv", "CvNCvvC", "CvNCvCv" , "NCvC"))

第二列表示第一列的结构。如果在第二列中出现 C:、NC 或 CC 组合,我需要从第一列中提取它们所指的内容。

所以我需要:

kk C: kk C: mn CC ngg NC ngk NC mp NC nj NC 需要考虑的一件事是,简单的计数不适用于左列中的 2 个字母,它们对应于右列中的 1 个字母,即 ng|sy|kh = C(不是 CC,因为它们表示一个音素) 而且,总之,这些组合可以出现不止一种

谢谢

更新:

这将是正则表达式的匹配模式:

(nj|ngk|ngg|nc|nt|nd|mp|mb) = NC
(ng|sy|kh) = C    
[b-df-hj-np-tv-xz])\\1+) = C:
([b-df-hj-np-tv-z]) = C
(') = :    
((a|e|i|o|u)\\1+) = v:    
(a|e|i|o|u)  = v     

【问题讨论】:

  • 添加一个样本数据集,并在字母之间按顺序列出匹配规则
  • 您不能使用任何用于查找结构的工具吗?我不认为有一个简单的正则表达式解决方案,因为长度不匹配一对一。

标签: r subset


【解决方案1】:

有趣的问题。我可能刚刚重新发明了用于查找这些结构的算法,但它似乎有效。

df <- data.frame(
  word=c("pokkoitta", "demna", "ningatinggo", "tengkeam", "bampana", "njam"),
  structure=c("CvC:vvC:v", "CvCCv", "CvCvCvNCv", "CvNCvvC", "CvNCvCv", "NCvC"),
  stringsAsFactors=FALSE)

pat <- data.frame(str=c("NC", "C", "C:", "C", "v:", "v"),
                  rex=c("nj|ngk|ngg|nc|nt|nd|mp|mb",
                        "ng|sy|kh",
                        "([b-df-hj-np-tv-xz])\\1+",
                        "[b-df-hj-np-tv-z]",
                        "(a|e|i|o|u)\\1+",
                        "a|e|i|o|u"), stringsAsFactors=FALSE)

xs <- xw <- df[,1]
for (i in 1:nrow(pat)) {
    rx <- gregexpr(pat[i, 2], xs)
    mc <- regmatches(xs, rx)
    mp <- sapply(mc, function(x) format(paste("", x), width=6))
    mc[lengths(mc) != 0] <- mp[lengths(mc) != 0]
    regmatches(xw, rx) <- mc
    regmatches(xs, rx) <- paste("", format(pat[i, 1], width=5))
}

phon <- trimws(cbind(word=xw, structure=xs))
phon <- apply(phon, 1, strsplit, " +")
phon <- lapply(phon, function(x) do.call(cbind, x))
head(phon, 3)
# [[1]]
#      word structure
# [1,] "p"  "C"      
# [2,] "o"  "v"      
# [3,] "kk" "C:"     
# [4,] "o"  "v"      
# [5,] "i"  "v"      
# [6,] "tt" "C:"     
# [7,] "a"  "v"      
# 
# [[2]]
#      word structure
# [1,] "d"  "C"      
# [2,] "e"  "v"      
# [3,] "m"  "C"      
# [4,] "n"  "C"      
# [5,] "a"  "v"      
# 
# [[3]]
#      word  structure
# [1,] "n"   "C"      
# [2,] "i"   "v"      
# [3,] "ng"  "C"      
# [4,] "a"   "v"      
# [5,] "t"   "C"      
# [6,] "i"   "v"      
# [7,] "ngg" "NC"     
# [8,] "o"   "v"      

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2013-10-21
    • 1970-01-01
    • 2019-09-24
    • 2016-02-03
    • 2021-07-14
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多