我有一个由具有不断变化的列数的for循环创建的数据框。
在另一个函数中,我希望删除最后五列。
具有数据帧长度的变量是“单位”,它的数字在10和150之间。
我已尝试使用列的名称删除但它不起作用。 (一旦我尝试打开“newframe”R studio崩溃,查看myframe就没问题了。)
drops <- c("name1","name2","name3","name4","name5")
newframe <- results[,!(names(myframe) %in% drops)]
有没有办法只删除数据帧的最后五列而不依赖于列的名称或数字
答案 0 :(得分:7)
length(df)
也可以使用:
mydf[1:(length(mydf)-5)]
答案 1 :(得分:2)
您可以使用列数(ncol()
):
df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10), ws = rnorm(10))
# rm last 2 columns
df[ , -((ncol(df) - 1):ncol(df))]
# or
df[ , -seq(ncol(df)-1, ncol(df))]
答案 2 :(得分:2)
我更喜欢的方法是使用rev
,这使语法更清晰。对于mtcars
数据集
mtcars[-rev(seq_len(ncol(mtcars)))[1:5]]
或使用head
(类似于西蒙斯建议)
mtcars[head(seq_len(ncol(mtcars)), -5)]
答案 3 :(得分:1)
Yo可以利用list
的{{1}}方法(它删除整个列表元素,并且与删除行的head()
方法的工作方式不同):
data.frame