r - 尝试在 R 中删除列,返回逻辑向量
问题描述
我有一个数据框,我需要按列名删除某些列。列名是这样生成的
drops <- sprintf("days.7.%d",1:7)
我的数据框是df
,我想删除生成的列,这就是我尝试过的。
dfnew <- df[,(!names(df) %in% drops)]
它再次返回一个逻辑向量而不是数据帧。
我也尝试了这些方法,但每次它返回相同的逻辑向量
dropnames<- names(df) %in% drops
dfnew <- df[!dropnames]
dfnew <- df[ , -which(names(df) %in% drops)]
解决方案
你可能有data.table
. 看这个例子
df <- mtcars[, 1:9]
names(df)[1:7] <- drops
df[,(!names(df) %in% drops)] #works
# vs am
#Mazda RX4 0 1
#Mazda RX4 Wag 0 1
#Datsun 710 1 1
#Hornet 4 Drive 1 0
#Hornet Sportabout 0 0
#...
现在将其转换为data.table
library(data.table)
setDT(df)
并尝试同样的事情
df[,(!names(df) %in% drops)] #you get
#[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
要按data.table
名称进行子集化,您可以这样做
df[, setdiff(names(df), drops), with = FALSE]
# vs am
# 1: 0 1
# 2: 0 1
# 3: 1 1
# 4: 1 0
# 5: 0 0
# 6: 1 0
#...
推荐阅读
- swift - 为什么在 Swift5 中, UIImage.jpegData() 调用会保留那么多内存?
- c++ - 动图QT
- python - 如何使用 Python 使用内容编码抓取网站?
- javascript - 如何改进我的搜索功能逻辑?使用 Lunr.js
- r - 旋转ggplot图例中的垂直线
- python - 无法使用 Pymongo 连接到 mongodb free atlas
- hybris - 如何添加新的 occ 端点参数以获取 url?
- ruby - 读取复杂字符串的完整 CSV 单元格数据
- jooq - jOOQ TransactionListener 永远不会被调用
- reactjs - 在链接悬停时响应发送 API 调用以预加载数据