相关疑难解决方法(0)

按名称删除数据框列

我有一些列要从数据框中删除.我知道我们可以使用以下内容单独删除它们:

df$x <- NULL
Run Code Online (Sandbox Code Playgroud)

但我希望用更少的命令来做到这一点.

另外,我知道我可以使用整数索引来删除列,如下所示:

df <- df[ -c(1, 3:6, 12) ]
Run Code Online (Sandbox Code Playgroud)

但我担心我的变量的相对位置可能会改变.

考虑到R的强大程度,我认为可能有一种更好的方法,就是逐一删除每一列.

r dataframe r-faq

807
推荐指数
18
解决办法
133万
查看次数

为什么`[`比`子集更好?

当我需要过滤data.frame,即提取满足特定条件的行时,我更喜欢使用该subset函数:

subset(airquality, Month == 8 & Temp > 90)
Run Code Online (Sandbox Code Playgroud)

而不是[功能:

airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Run Code Online (Sandbox Code Playgroud)

我偏好有两个主要原因:

  1. 我发现代码从左到右读得更好.甚至那些对R一无所知的人也可以说出subset上面的陈述是做什么的.

  2. 因为列可以在select表达式中称为变量,所以我可以节省一些键击.在我上面的例子中,我只需输入airquality一次subset,但只输入三次[.

所以我过着幸福快乐,subset随处可见,因为它更短,读起来更好,甚至为我的R编码员提倡它的美丽.但昨天我的世界崩溃了.在阅读subset文档时,我注意到这一节:

警告

这是一种便于交互使用的便利功能.对于编程,最好使用像[的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果.

有人可以帮助澄清作者的意思吗?

首先,他们的意思是" 交互使用 "?我知道什么是交互式会话,而不是在BATCH模式下运行的脚本,但我不知道它应该有什么区别.

那么,请你解释一下" 论证子集的非标准评估 "以及为什么它是危险的,或许可以提供一个例子?

r subset filter r-faq

392
推荐指数
2
解决办法
9万
查看次数

如何以更智能的方式从矩阵中删除特定的行和列?

我们说t1是:

t1 <- array(1:20, dim=c(10,10))

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1   11    1   11    1   11    1   11    1    11
 [2,]    2   12    2   12    2   12    2   12    2    12
 [3,]    3   13    3   13    3   13    3   13    3    13
 [4,]    4   14    4   14    4   14    4   14    4    14
 [5,]    5   15    5   15    5   15    5   15    5    15
 [6,]    6   16    6   16    6   16    6 …
Run Code Online (Sandbox Code Playgroud)

r

38
推荐指数
2
解决办法
12万
查看次数

在 R 中选择除特定(按名称)之外的所有列?

我有以下数据框:

a b   c   d   e      
1 rr  dfv 5   0.1
9 t   rr1 222 0.44
7 sdf we  1   0.111
Run Code Online (Sandbox Code Playgroud)

我想选择除 d 和 e 之外的所有列。我知道我可以为此使用子集:subset(df, -c(d, e)) 为什么我不能这样做df[,-c(d,e)]

请指教。

PS @sotos 和其他人:

x[,-c("b", "c")] -c("b", "c") 中的错误:一元运算符的参数无效

r dataframe

8
推荐指数
0
解决办法
2万
查看次数

如何删除R中嵌套数据框中的列?

我知道有不同的方法来drop一个column一个data frameR

按名称删除数据框列

如何在数据框中按名称删除列

从R中的data.frame中删除整个列

现在我的问题:我有一个数据框说df400 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)

r dataframe

5
推荐指数
1
解决办法
951
查看次数

在dplyr(过滤列)R中的条件下选择/删除列

有没有办法根据某些条件过滤掉列dplyr?这有点令人困惑,因为它与正常过滤相反。

我找不到任何直接适用于 SO 的内容。找到了这个这个,但他们做的事情并不完全相同。

基本上,我不想根据列的值过滤掉行,而是想根据行的值删除列。

这是使用以下数据框的示例:

df <- data.frame(aa = c("1", "a", "10.2", "12.1", "8.7"), 
                 ab = c("1", "b", "5.3", "8.1", "9.2"), 
                 ac = c("0", "a", "1.8", "21.5", "16.0"), 
                 ad = c("0", "b", "11.1", "15.9", "23.6"))
Run Code Online (Sandbox Code Playgroud)

我知道这是一个奇怪的数据集,并且列有不同类型的数据。这实际上是问题的原因。我正在努力清理这个。

这是一个base使用传统子集的解决方案,它返回列“ab”和“ad”:

df[, df[2,] == "b"]
Run Code Online (Sandbox Code Playgroud)

有没有办法使用dplyr? 我尝试使用filterselectsubset没有用,但我可能在这种情况下,错误地使用它们。

filtering r dplyr

3
推荐指数
1
解决办法
7892
查看次数

R:通过引用从data.table中删除列,而不使用名称

几乎重复.我想从数据表中删除列,但我想有效地完成它.我有一个我想保留的列名列表.联系问题的所有答案都意味着做类似的事情

data.table.new <- data.table.old[, my.list]
Run Code Online (Sandbox Code Playgroud)

在某些关键点上会给我一个新对象,而旧对象仍在内存中.然而,我data.table.old是巨大的,因此我更喜欢通过引用来做到这一点,如此处所示

set(data.table.old, j = 'a', value = NULL)
Run Code Online (Sandbox Code Playgroud)

但是,由于我有列的白名单,而不是黑名单,我需要遍历所有列名,检查它们是否在my.list,然后应用set().有没有更清洁/其他方式这样做?

r data.table

2
推荐指数
1
解决办法
2092
查看次数

如何根据数据框的名称而不是索引选择数据框中的列范围?

在像这样创建的pandas数据框中:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(10, size=(6, 6)),
                  columns=['c' + str(i) for i in range(6)],
                  index=["r" + str(i) for i in range(6)])
Run Code Online (Sandbox Code Playgroud)

这看起来如下:

    c0  c1  c2  c3  c4  c5
r0   2   7   3   3   2   8
r1   6   9   6   7   9   1
r2   4   0   9   8   4   2
r3   9   0   4   3   5   4
r4   7   6   8   8   0   8
r5   0   6   1   8   2   2
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法轻松选择某些行和/或一系列列.loc: …

r subset code-conversion dataframe

1
推荐指数
1
解决办法
2万
查看次数

R lapply 从数据帧列表中删除列

我正在尝试使用 lapply 和以下代码从数据帧列表中删除单个列(想要从 df1 和 df2 中删除列名“ID”)。通过命令提示符运行时,我收到以下错误消息:

eval(substitute(select), nl,parent.frame()) 中的错误:找不到对象“ID”调用:lapply -> FUN ->subset.data.frame -> eval -> eval

关于为什么代码会产生错误有什么想法吗?

df1 <- data.frame(
 "Qty" = c(15,29,12,53),
 "Type"   = c("A","B","B","E"),
 "ID"   = c("x123","y121","x556","y119"))

df2 <- data.frame(
 "Qty" = c(5,92,25,31),
 "Type"   = c("I","L","Z","K"),
 "ID"   = c("p433","q232","y344","l598"))

df_list <- mget(ls(pattern= "^df"))

df_list <- lapply(df_list, function(x) subset.data.frame(x, select=-c(ID)))

list2env(df_list, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

r subset lapply

1
推荐指数
1
解决办法
1537
查看次数

为什么 mtcars[, -c("mpg"), drop = F] 不起作用?

这有效:

mtcars[, c("mpg"), drop = F]

                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

1
推荐指数
1
解决办法
89
查看次数

标签 统计

r ×10

dataframe ×5

subset ×3

r-faq ×2

code-conversion ×1

data.table ×1

dplyr ×1

filter ×1

filtering ×1

lapply ×1