使用 sapply 仅获取列表的第一个元素

use*_*782 2 arguments r sapply

我在 R 中读取了一个包含 n 列的数据框 (df<-read.csv(data,as.is=T)),其中一个是像这样的 char 列:

 df$qual
===========

1/5
12/17
...
0/3
9/14
Run Code Online (Sandbox Code Playgroud)

我想将此列转换为数字向量,仅保留每行的第一个元素。

 df$qual
===========

1
12
...
0
9
Run Code Online (Sandbox Code Playgroud)

我想有更简单的方法(欢迎提出想法!),但我尝试了 sapply:

sapply(df$qual,strsplit() ,simplify=T)
Run Code Online (Sandbox Code Playgroud)

现在的问题是我如何/在哪里传递参数 split="/" 以便它起作用?R帮助并没有多大帮助。

提前致谢,第

Ben*_*ker 6

也许

sapply(strsplit(df$qual,split="/") , "[[", 1)
Run Code Online (Sandbox Code Playgroud)

?

解释:strsplit生成结果列表,即原始输入中每个字符元素的字符向量。这"[["是调用索引运算符的一种简写方式,并1表示将附加参数传递1[[-- 即,取第一个元素。另外两种可能更透明的方法来做同样的事情:

sapply(strsplit(df$qual,split="/"), function(x) x[[1]])
Run Code Online (Sandbox Code Playgroud)

或者

sapply(strsplit(df$qual,split="/") , head, 1)
Run Code Online (Sandbox Code Playgroud)

您可能需要as.numeric()在最后考虑。