我的数据集有几个具有相同名称的列,我想删除它们。
不幸的是,select(data, -Offender)
不起作用(Error: Can't bind data because some arguments have the same name
),但是我也不能使用janitor::clean_names
来克服这一点-我需要其余的列名保持不变。
我尝试使用基数R(df1 <- subset(df1, select = -c(Offender))
),但随后将其重命名为其他违法者。#
答案 0 :(得分:4)
这是一个基本解决方案。
# Create data frame
df <- data.frame(runif(10), runif(10), runif(10), runif(10))
names(df) <- c("foo", "bar", "bar", "bar")
# Examine data
print(df)
#> foo bar bar bar
#> 1 0.4126322 0.1436917 0.4870304 0.80514914
#> 2 0.1642798 0.7948858 0.7741611 0.64353516
#> 3 0.6485090 0.6607900 0.9260459 0.75226835
#> 4 0.5254531 0.5535233 0.5746025 0.07131740
#> 5 0.1367792 0.4830001 0.4947695 0.46050685
#> 6 0.9517484 0.5750567 0.2231635 0.20050668
#> 7 0.9535626 0.1362335 0.5429668 0.07581875
#> 8 0.6679136 0.5017095 0.3106441 0.02235911
#> 9 0.4489072 0.3811038 0.1922099 0.07851105
#> 10 0.7724686 0.1284880 0.4240226 0.44462081
# Remove all columns called "bar"
df[, "bar" == names(df)] <- NULL
# Examine data again
print(df)
#> foo
#> 1 0.4126322
#> 2 0.1642798
#> 3 0.6485090
#> 4 0.5254531
#> 5 0.1367792
#> 6 0.9517484
#> 7 0.9535626
#> 8 0.6679136
#> 9 0.4489072
#> 10 0.7724686
由reprex package(v0.3.0)于2019-06-24创建
答案 1 :(得分:1)
当我完成输入问题时,我就知道了:
df1 <- subset(df1, select = -Offender)
重命名所有Offenders
,而其他列保持不变。 select_at(vars(-starts_with("Offender")))
,鲍勃是你的叔叔。简而言之:
df1 <- subset(df1, select = -Offender) %>%
select_at(vars(-starts_with("Offender")))
从本质上讲,基R不会抱怨列具有相同的名称,并将为您静默修复它。届时,您可以tidyverse
尽情放松。
答案 2 :(得分:0)
如果要删除所有名为Offender的列,我认为有一种更简便,更优雅的方法:
df2 <- df1 %>%
dplyr::select(-starts_with("Offender"))
如果那不是您想要的,也许举一个最小的例子将有助于更好地说明您正在尝试做的事情。