我的数据框如下:
product<-c("ab","ab","ab","ac","ac","ac")
shop<-c("sad","sad","sad","sadas","fghj","xzzv")
week<-c(31,31,32)
category<-c("a","a","a","b","b","b")
tempr<-c(35,35,14,24,14,5)
value<-c(0,0,-6,8,4,0)
store<-data.frame(product,shop,category,tempr,value)
如下所示:
product shop category tempr value
ab sad a 35 0
ab sad a 35 0
ab sad a 14 -6
ac sadas b 24 8
ac fghj b 14 4
ac xzzv b 5 0
我有一个问题可能是错误的,但我想通过按名称选择第二列,然后按索引号删除某些列(1、3、4),然后按索引选择其余列,来对该数据帧进行子集化数字不知道极限。像这样:
store2<-store2[,input$lux2,-c(1,3),4:]
让我们说我通过从selectInput中输入“ shop”来删除第1列和第3列,然后保留所有列。结果将是:
shop tempr value
sad 35 0
sad 35 0
sad 14 -6
adas 24 8
fghj 14 4
xzzv 5 0
答案 0 :(得分:1)
您不能按名称混合选择,否定选择和按索引进行选择。 您必须决定使用名称还是索引号。
类似的事情会起作用:
colByName = "shop"
removeByInd = c(1,3)
fromNtoEnd = 4
ind <- setdiff(
c( match(colByName, names(store)), fromNtoEnd:ncol(store) ),
removeByInd
)
store2 <- store[,ind]
# shop tempr value
#1 sad 35 0
#2 sad 35 0
#3 sad 14 -6
#4 sadas 24 8
#5 fghj 14 4
#6 xzzv 5 0
如果您考虑使用dplyr
,则可以使用:
store %>% select(-c(1,3),"shop",4:ncol(.))
这与您在问题中的“想象力”非常接近。