我有一些列要从数据框中删除.我知道我们可以使用以下内容单独删除它们:
df$x <- NULL
Run Code Online (Sandbox Code Playgroud)
但我希望用更少的命令来做到这一点.
另外,我知道我可以使用整数索引来删除列,如下所示:
df <- df[ -c(1, 3:6, 12) ]
Run Code Online (Sandbox Code Playgroud)
但我担心我的变量的相对位置可能会改变.
考虑到R的强大程度,我认为可能有一种更好的方法,就是逐一删除每一列.
偶然我遇到了"[<-"操作员的奇怪行为.它的行为会有所不同,具体取决于调用的顺序以及我是使用RStudio还是普通的RGui.我将通过一个例子说清楚.
x <- 1:10
"[<-"(x, 1, 111)
x[5] <- 123
Run Code Online (Sandbox Code Playgroud)
据我所知,第一个分配不应该改变x(或者我可能是错的?),而第二个应该这样做.事实上,上述操作的结果是
x
[1] 1 2 3 4 123 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
但是,当我们以不同的顺序执行这些操作时,结果会有所不同并且x已经发生变化!意味深长:
x <- 1:10
x[5] <- 123
"[<-"(x, 1, 111)
x
[1] 111 2 3 4 123 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
但它只发生在我使用普通R!在RStudio中,两个选项的行为都是相同的.我在两台机器上检查过它(一台用Fedora,一台用Win7),情况看起来完全一样.我知道'功能'版本("[<-"(x..))可能从未使用过,但我很好奇它为什么会发生.谁能解释一下呢?
==========================
编辑:好的,所以从评论我得到的原因是x <- 1:10类型'整数'和更换后x[5] <- 123的'双'.但仍然存在为什么RStudio的行为不同的问题?我重新启动R会话,它不会改变任何东西.
我必须删除数据框中有超过4000列和180行的列.我想设置的条件是删除数据框中的列:(i)如果列中的值/条目少于两个,则删除列column(ii)如果列中没有两个连续(一个接一个)值,则删除该列.(iii)移除所有值为NA的列.我提供了要删除列的条件.这里的目的不仅仅是找到一个名称列,如"如何删除data.table中的列?".我说明如下:
A B C D E
0.018 NA NA NA NA
0.017 NA NA NA NA
0.019 NA NA NA NA
0.018 0.034 NA NA NA
0.018 NA NA NA NA
0.015 NA NA NA 0.037
0.016 NA NA NA 0.031
0.019 NA 0.4 NA 0.025
0.016 0.03 NA NA 0.035
0.018 NA NA NA 0.035
0.017 NA NA NA 0.043
0.023 NA NA NA 0.040
0.022 NA NA NA 0.042
Run Code Online (Sandbox Code Playgroud)
期望的数据帧:
A E
0.018 NA
0.017 NA
0.019 NA …Run Code Online (Sandbox Code Playgroud)