相关疑难解决方法(0)

将列中以逗号分隔的字符串拆分为单独的行

我有一个数据框,如下所示:

data.frame(director = c("Aaron Blaise,Bob Walker", "Akira Kurosawa", 
                        "Alan J. Pakula", "Alan Parker", "Alejandro Amenabar", "Alejandro Gonzalez Inarritu", 
                        "Alejandro Gonzalez Inarritu,Benicio Del Toro", "Alejandro González Iñárritu", 
                        "Alex Proyas", "Alexander Hall", "Alfonso Cuaron", "Alfred Hitchcock", 
                        "Anatole Litvak", "Andrew Adamson,Marilyn Fox", "Andrew Dominik", 
                        "Andrew Stanton", "Andrew Stanton,Lee Unkrich", "Angelina Jolie,John Stevenson", 
                        "Anne Fontaine", "Anthony Harvey"), AB = c('A', 'B', 'A', 'A', 'B', 'B', 'B', 'A', 'B', 'A', 'B', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'A'))
Run Code Online (Sandbox Code Playgroud)

如您所见,director列中的某些条目是由逗号分隔的多个名称.我想将这些条目拆分为单独的行,同时保持另一列的值.例如,上面数据框中的第一行应该分成两行,director列中各有一个名称,列中有"A" …

string split r r-faq

93
推荐指数
4
解决办法
3万
查看次数

从字符串中提取数字,包括"|"

我有数据,其中一些项目是由"|"分隔的数字,如:

head(mintimes)
[1] "3121|3151" "1171"      "1351|1381" "1050"      ""          "122" 
head(minvalues)
[1] 14    10    11    31 Inf    22
Run Code Online (Sandbox Code Playgroud)

我想要做的是提取所有时间并将它们与最小值匹配.最终结果如下:

times    values
3121     14
3151     14
1171     10
1351     11
1381     11
1050     31
122      22
Run Code Online (Sandbox Code Playgroud)

我试过了strsplit(mintimes, "|"),str_extract(mintimes, "[0-9]+")但我尝试过,但似乎没有用.有任何想法吗?

regex string split r

6
推荐指数
1
解决办法
158
查看次数

R:我设置stringsAsFactors = F,但仍然得到"无效因子级别,NA生成"错误

有人可以帮我解决这个问题吗?任何建议都非常感谢!

我开始时:

A <- data.frame(stringsAsFactors = F)
A <- edit(A)
Run Code Online (Sandbox Code Playgroud)

然后我为A填写了一些值,所以它看起来像这样:

A
  var1  var2
1    a x,y,z
2    b   p,q
3    c   g,h
Run Code Online (Sandbox Code Playgroud)

我的目标是以这种形式获得数据框:

  var1  var2
1    a     x
2    a     y
3    a     z
4    b     p
5    b     q  
6    c     g
7    c     h
Run Code Online (Sandbox Code Playgroud)

这就是我尝试实现它的方式:

A2 <- data.frame(stringsAsFactors = F)
for(i in 1:nrow(A)){
  if(grepl(",", A[i,2])){
    split <- unlist(strsplit(A[i,2], ","))

    for(j in 1:length(split)){
        newrow <- c(A[i,1],split[j])
        A2 <- rbind(A2, newrow)
    }
  }else{
    A2 <- rbind(A2, A[i,])
  }
} …
Run Code Online (Sandbox Code Playgroud)

r

1
推荐指数
1
解决办法
5841
查看次数

标签 统计

r ×3

split ×2

string ×2

r-faq ×1

regex ×1