从数据帧中删除最后5列而不知道具体数字

时间:2014-10-21 09:45:03

标签: r dataframe

我有一个由具有不断变化的列数的for循环创建的数据框。

在另一个函数中,我希望删除最后五列。

具有数据帧长度的变量是“单位”,它的数字在10和150之间。

我已尝试使用列的名称删除但它不起作用。 (一旦我尝试打开“newframe”R studio崩溃,查看myframe就没问题了。)

drops <- c("name1","name2","name3","name4","name5")
newframe <- results[,!(names(myframe) %in% drops)]

有没有办法只删除数据帧的最后五列而不依赖于列的名称或数字

4 个答案:

答案 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