假设我有一个字符串数组,如:
sa<-c("HLA:HLA00001 A*01:01:01:01 1098 bp",
"HLA:HLA01244 A*01:01:02 546 bp",
"HLA:HLA01971 A*01:01:03 895 bp")
Run Code Online (Sandbox Code Playgroud)
我的问题是将它转换为数据框的最佳方法是什么,例如:
Seq Type Length
1 HLA:HLA00001 A*01:01:01:01 1098 bp
2 HLA:HLA01244 A*01:01:02 546 bp
3 HLA:HLA01971 A*01:01:03 895 bp
Run Code Online (Sandbox Code Playgroud) 我有数据框
df=data.frame(x=rnorm(8),y=runif(8),longstring=c("foo_100_Case1","foo_125_Case1","bar_100_Case1","bar_125_Case1","foo_100_Case2","foo_125_Case2","bar_100_Case2","bar_125_Case2"),stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)
我需要将最后一列拆分为三列,分隔符为"_".我一直在做以下事情:
a=matrix(unlist(strsplit(df$longstring,"_",fixed=T)),8,3,byrow = T)
df$type=a[,1]
df$point=a[,2]
df$case=a[,3]
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种更简单的方法:组合strsplit和unlist特别笨拙,并且它不会使代码非常易读.
在此示例中,分隔digitsfrom 的最有效方法是什么letters:
V1 V2
1 p_men_1 1
2 p_men_2 0
3 p_men_3 1
4 p_wom_1 1
5 p_wom_2 1
6 p_wom_3 0
Run Code Online (Sandbox Code Playgroud)
输出中
V1 V2 V3
1 p_men 1 1
2 p_men 2 0
3 p_men 3 1
4 p_wom 1 1
5 p_wom 2 1
6 p_wom 3 0
Run Code Online (Sandbox Code Playgroud)
我试过了
library(tidyr)
library(dplyr)
df %>% separate(V1, c('V1', 'V2'), sep = '_')
Run Code Online (Sandbox Code Playgroud)
但由于'_',它不起作用
df = rbind(c('p_men_1', 1),
c('p_men_2', 0),
c('p_men_3', 1),
c('p_wom_1', 1),
c('p_wom_2', 1),
c('p_wom_3', 0)) …Run Code Online (Sandbox Code Playgroud) 关于问题 :
我有一个字符串向量foo:
>foo = c("1x2","3x4","5x6","7x8","9x10")
Run Code Online (Sandbox Code Playgroud)
我将单个字符串拆分为"x"并将结果粘贴到goo中:
>goo = strsplit(foo, "x")
>goo
[[1]]
[1] "1" "2"
[[2]]
[1] "3" "4"
[[3]]
[1] "5" "6"
[[4]]
[1] "7" "8"
[[5]]
[1] "9" "10"
Run Code Online (Sandbox Code Playgroud)
如何从此列表中提取第一个和第二个"列"?(我想要(1,3,5,7,9)和(2,4,6,8,10))
我必须导入一个类似于以下数据框的表:
> df = data.frame(x = c("a", "a.b","a.b.c","a.b.d", "a.d"))
> df
x
1 <NA>
2 a
3 a.b
4 a.b.c
5 a.b.d
6 a.d
Run Code Online (Sandbox Code Playgroud)
我想根据我会找到多少个分隔符将第一列分隔在一列或多列中。
输出应该像这样
> df_separated
col1 col2 col3
1 a <NA> <NA>
2 a b <NA>
3 a b c
4 a b d
5 a d <NA>
Run Code Online (Sandbox Code Playgroud)
我尝试在 tidyr 中使用单独的函数,但我需要先验地指定我需要多少输出列。
非常感谢您的帮助
我有一个数据框如下.我想将最后一列拆分为2.拆分需要基于唯一的第一列完成:其余的列不重要.
在新数据框中,将有4列.第3列为(a,b,d),第4列为(1,2:3,3:4:4)
有什么建议?我的代码的第4行不起作用:(.我可以使用全新的解决方案或对第4行进行更正
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(3, 2, 1)
df <- data.frame(employee, salary, originalColumn = c("a :1", "b :2:3", "d: 3:4:4"))
as.data.frame(do.call(rbind, strsplit(df,":")))
Run Code Online (Sandbox Code Playgroud)
-------------------- UPDATE1
以下解决方案效果很好 但我需要一个修改过的解决方案,因为我刚刚意识到第3列中的某些单元格不会有":".在这种情况下,我希望该单元格中的文本在拆分该列后仅出现在第一列中
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(3, 2, 1)
df <- data.frame(employee, salary, originalColumn = c("a :1", "b", "d: 3:4:4"))
Run Code Online (Sandbox Code Playgroud) 我有以下向量:
a <- c("abc_lvl1", "def_lvl2")
Run Code Online (Sandbox Code Playgroud)
我基本上想分成两个向量:
("abc", "def")和("lvl1", "lvl2).我知道如何用sub替换:
sub(".*_", "", a)
[1] "lvl1" "lvl2"
Run Code Online (Sandbox Code Playgroud)
我认为这可以转化为"在"_"之前搜索任意数量的任何字符,并且一无所获." 因此 - 我想 - 这应该给我另一个所需的矢量:
sub("_*.", "", a),但它只删除了主角:
[1] "bc_lvl1" "ef_lvl2"
Run Code Online (Sandbox Code Playgroud)
我在哪里陷入困境?这基本上等同于excel中的"text-to-columns"功能.
例如,该行之一包含9343435445/9433445532.我想拆分它们并将各个单独的粘贴在一个新列中.我尝试了以下内容.
bookings <- read.csv(file = 'bookings.csv', header = T)
bookings$set1 <- as.character(bookings$set1)
bookings$set3 <- gsub('\\/..........', '',bookings$set1)
bookings$set4 <- gsub('\\d{10}\\/', ' ',bookings$set1)
Run Code Online (Sandbox Code Playgroud)
但是没有给出理想的输出.
在一项调查中,有一个问题是“课程的哪个方面对您学习概念帮助最大?选择所有适用的”
以下是回复列表的样子:
Student_ID = c(1,2,3)
Responses = c("lectures,tutorials","tutorials,assignments,lectures", "assignments,presentations,tutorials")
Grades = c(1.1,1.2,1.3)
Data = data.frame(Student_ID,Responses,Grades);Data
Student_ID | Responses | Grades
1 | lectures,tutorials | 1.1
2 | tutorials,assignments,lectures | 1.2
3 | assignments,presentations,tutorials | 1.3
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个看起来像这样的数据框
Student_ID | Lectures | Tutorials | Assignments | Presentation | Grades
1 | 1 | 1 | 0 | 0 | 1.3
2 | 1 | 1 | 1 | 0 | 1.4
3 | 0 | 1 | 1 | 1 | 1.3 …Run Code Online (Sandbox Code Playgroud) 这是我的数据框架.
> data
Manufacturers
1 Audi,RS5
2 BMW,M3
3 Cadillac,CTS-V
4 Lexus,ISF
Run Code Online (Sandbox Code Playgroud)
所以我想分割制造商和模型,像这样,
> data
Manufacturers Models
1 Audi RS5
2 BMW M3
3 Cadillac CTS-V
4 Lexus ISF
Run Code Online (Sandbox Code Playgroud)
我很感激这个问题的任何帮助.非常感谢.
r ×10
strsplit ×3
dataframe ×2
regex ×2
split ×2
data-import ×1
delimiter ×1
surveymonkey ×1
tidyr ×1
tidyverse ×1