我有一些列要从数据框中删除.我知道我们可以使用以下内容单独删除它们:
df$x <- NULL
Run Code Online (Sandbox Code Playgroud)
但我希望用更少的命令来做到这一点.
另外,我知道我可以使用整数索引来删除列,如下所示:
df <- df[ -c(1, 3:6, 12) ]
Run Code Online (Sandbox Code Playgroud)
但我担心我的变量的相对位置可能会改变.
考虑到R的强大程度,我认为可能有一种更好的方法,就是逐一删除每一列.
不是'你怎么......?' 但更多'你怎么......?'
如果你有一个文件有人给你200个列,并且你想将它减少到你需要分析的几个,你怎么去做?一种解决方案是否比另一种解决方
假设我们有一个包含列col1,col2到col200的数据框.如果您只想要1-100然后125-135和150-200,您可以:
dat$col101 <- NULL
dat$col102 <- NULL # etc
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,c("col1","col2",...)]
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,c(1:100,125:135,...)] # shortest probably but I don't like this
Run Code Online (Sandbox Code Playgroud)
要么
dat <- dat[,!names(dat) %in% c("dat101","dat102",...)]
Run Code Online (Sandbox Code Playgroud)
还有什么我想念的吗?我知道这是主观的,但这是你可能会潜入并开始以一种方式进行的那些细节之一,并且当有更有效的方法时会陷入习惯.就像这个问题关于哪些.
编辑:
或者,是否有一种简单的方法来创建可行的列名称向量?name(dat)不打印它们之间的逗号,你需要在上面的代码示例中,所以如果以这种方式打印名称,你到处都有空格,必须手动输入逗号...是否有命令会给你"col1","col2","col3",...作为你的输出,这样你就可以轻松抓住你想要的东西?
看起来可以将列添加/删除到就地,即不将所有其他列复制到新表.data.table
是否可以用香草做到这一点data.frame?
PS.我知道如何"功能性地"添加/删除列,即创建一个新框架而不修改原始框架.
可能重复:
从R中的data.frame中删除整个列
是否有更好的方法从数据框中按名称删除列而不是以下?
Orange[colnames(Orange) != "Age"]
Run Code Online (Sandbox Code Playgroud)
我尝试过以下操作并收到错误:
> Orange[-"Age"]
Error in -"age" : invalid argument to unary operator
> Orange[,-"Age"]
Error in -"age" : invalid argument to unary operator
> Orange[[,-"Age"]]
Error in -"age" : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud) 我知道有不同的方法来drop一个column一个data frame的R像
现在我的问题:我有一个数据框说df有400 plus文件的形式nested data frame.
df
[[1]]
SignalIntensity SNR
1 109 6.1823089314 0.8453576915
2 110 10.1727771385 4.3837077591
3 111 7.2922746927 1.0725751161
4 112 8.8984671629 2.3192184908
5 113 9.5910338232 3.7133402249
6 114 7.9850187685 1.5008899345
7 116 7.7893230124 1.3636655582
.
.
.
[[2]]
SignalIntensity SNR
1 109 6.1823089314 0.8453576915
2 110 10.1727771385 4.3837077591
3 111 7.2922746927 1.0725751161
4 112 8.8984671629 2.3192184908
5 113 9.5910338232 …Run Code Online (Sandbox Code Playgroud) 我remove()过去曾成功使用该函数删除数据集和变量。然而,在过去的几天里,尽管我能够删除数据集,但我一直无法删除变量。
我不知道如何将数据上传到 stackoverflow 问题,但我可以向您展示我使用的代码和我得到的输出。调用数据集test2,变量为verbcatTC。我没有附加数据集。以下是删除此变量的四次尝试,以及每次收到的警告消息。然后我运行两行代码来向您展示该变量存在于数据集中的所有信息。
非常感谢您的帮助,如果我可以提供更多信息,请告诉我。remove()另外,如果我无法工作,我还可以使用什么其他函数来消除变量?
> remove(test2$verbcatTC)
Error in remove(test2$verbcatTC) :
... must contain names or character strings
> remove("verbcatTC")
Warning message:
In remove("verbcatTC") : object 'verbcatTC' not found
> remove(verbcatTC)
Warning message:
In remove(verbcatTC) : object 'verbcatTC' not found
> remove("test2$verbcatTC")
Warning message:
In remove("test2$verbcatTC") : object 'test2$verbcatTC' not found
> head(test2$verbcatTC)
[1] Positive Positive Positive Positive Positive Positive
Levels: Negative Positive
> str(test2$verbcatTC)
Factor w/ 2 levels "Negative","Positive": 2 2 …Run Code Online (Sandbox Code Playgroud) 我有一个像你在这里看到的数据框.
DRSi TP DOC DN date Turbidity Anions
158 5.9 3371 264 14/8/06 5.83 2246.02
217 4.7 2060 428 16/8/06 6.04 1632.29
181 10.6 1828 219 16/8/06 6.11 1005.00
397 5.3 1027 439 16/8/06 5.74 314.19
2204 81.2 11770 1827 15/8/06 9.64 2635.39
307 2.9 1954 589 15/8/06 6.12 2762.02
136 7.1 2712 157 14/8/06 5.83 2049.86
1502 15.3 4123 959 15/8/06 6.48 2648.12
1113 1.5 819 195 17/8/06 5.83 804.42
329 4.1 2264 434 16/8/06 6.19 2214.89
193 3.5 …Run Code Online (Sandbox Code Playgroud) 菜鸟问题 - 提前感谢您的耐心...
我有一个数据框:
vals <- c(1,1,1,1)
testdf <- data.frame("var1"=vals, "var2"=vals, "var3"=vals)
Run Code Online (Sandbox Code Playgroud)
我有一个变量名的字符向量:
varnames <- c("var1", "var2")
Run Code Online (Sandbox Code Playgroud)
这是一个字符向量 b/c 我用它在脚本的前面生成一个公式。
我想对数据帧进行子集化,以便排除 varnames 中的变量,例如
newDF <- subset(df, select=-varnames)
Run Code Online (Sandbox Code Playgroud)
这会产生错误,因为subset需要名称而不是字符。所以,我lapply用来将字符更改为名称:
varnames <- lapply(varnames, as.name)
Run Code Online (Sandbox Code Playgroud)
这个 lapply 函数的结果是一个命名(?)和嵌套(?)列表。
[[1]]
var1
[[2]]
var2
[[3]]
var3
Run Code Online (Sandbox Code Playgroud)
这就是我迷路的地方(我觉得自己像吃了疯狂药丸的穆加图……这让其他人感到困惑吗!?)。我可以看到每个值都已正确地从字符更改为名称,但它位于这个奇怪的嵌套结构中 - 因此当我尝试进行子集化时,出现错误。
我尝试了各种解决方案来取消嵌套和取消命名,但都没有成功。这一定是我想念的容易的东西。
作为奖励 - 有人能告诉我为什么 lapply 返回这个嵌套的命名列表而不是简单的向量是有用的吗?例如,它似乎与 Python 非常不同。谢谢你。
以下是来自 Datacamp 的练习。
使用 cbind() 调用包括所有三个工作表。确保urban_sheet2 和urban_sheet3 的第一列被删除,所以你没有重复的列。将结果存储在城市中。
代码:
# Add code to import data from all three sheets in urbanpop.xls
path <- "urbanpop.xls"
urban_sheet1 <- read.xls(path, sheet = 1, stringsAsFactors = FALSE)
urban_sheet2 <- read.xls(path, sheet = 2, stringsAsFactors = FALSE)
urban_sheet3 <- read.xls(path, sheet = 3, stringsAsFactors = FALSE)
# Extend the cbind() call to include urban_sheet3: urban
urban <- cbind(urban_sheet1, urban_sheet2[-1],urban_sheet3[-1])
# Remove all rows with NAs from urban: urban_clean
urban_clean<-na.omit(urban)
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么使用[-1]删除 cbind 中的第一列。是里面方括号的特殊用途cbind() …