我想识别一个称为“公牛”的数据帧的子集。子集应该包含数据帧的前10行中的任何大小写,并且具有不小于10的"YearsPro“变量的值。所以我写道:
bull[c(1:10) & bull$YearsPro >= 10,]但是上面的代码没有给出预期的输出。它还返回一条警告消息,说明“较长的对象长度不是较短对象长度的倍数”。
我想知道我的代码出了什么问题。谢谢!
下面是一个可重现的例子:
bull <- structure(list(Rider = c("Joao Ricardo Vieira", "Matt Triplett",
"J.B. Mauney", "Kaique Pacheco", "Nathan Schaper", "Valdiron de Oliveira",
"Guilherme Marchi", "Silvano Alves", "Reese Cates", "J.W. Harris",
"Stetson Lawrence", "Mike Lee", "Fabiano Vieira", "Cody Nance",
"Ben Jones"), Country = c("BRA", "USA", "USA", "BRA", "USA",
"BRA", "BRA", "BRA", "USA", "USA", "USA", "USA", "BRA", "USA",
"AUS"), YearsPro = c(3L, 4L, 10L, 2L, 6L, 9L, 16L, 7L, 9L, 10L,
8L, 14L, 9L, 9L, 17L)), .Names = c("Rider", "Country", "YearsPro"
), row.names = c(NA, 15L), class = "data.frame")发布于 2017-12-26 13:57:48
据我所知,&运算符用于布尔语句。您的第一个语句'c(1:10)‘是一个索引语句。您可以尝试如下所示:
new_bull <- bull[c(1:10),]
new_bull[new_bull$YearsPro > 10,]或
subset(bull[1:10,], YearsPro > 10)发布于 2017-12-27 00:49:00
老实说,你的问题不是很清楚,因为你没有返回可重复的代码和你的数据集的摘录。无论如何,我建议你使用tidyverse函数的两种方式。这取决于你的目标是什么:
library(tidyverse)
set.seed(1234)
bull <- data.frame(
id=c(1:20),
YearsPro=sample(1:30,20,replace=TRUE)
)
# Top 10 rows with YearsPro>10
new_bull <- bull %>%
top_n(n=10) %>%
filter(YearsPro>10)
# Into top 10 rows select records with YearsPro>10
new_bull1 <- bull %>%
slice(1:10) %>%
filter(YearsPro>10)https://stackoverflow.com/questions/47974337
复制相似问题