标签: subset

如何根据值向量对R中数据帧中的行进行子集?

我有两个数据集应该是相同的大小但不是.我需要修剪A中不在B中的值,反之亦然,以消除进入报告的图形中的噪声.(别担心,这些数据没有被永久删除!)

我看过以下内容:

但是我仍然无法使其正常工作.这是我的代码:

bg2011missingFromBeg <- setdiff(x=eg2011$ID, y=bg2011$ID)
#attempt 1
eg2011cleaned <- subset(eg2011, ID != bg2011missingFromBeg)
#attempt 2
eg2011cleaned <- eg2011[!eg2011$ID %in% bg2011missingFromBeg]
Run Code Online (Sandbox Code Playgroud)

第一次尝试只是消除了生成的setdiff向量中的第一个值.第二次尝试产生并且笨拙的错误:

Error in `[.data.frame`(eg2012, !eg2012$ID %in% bg2012missingFromBeg) 
:  undefined columns selected
Run Code Online (Sandbox Code Playgroud)

r subset r-faq

45
推荐指数
3
解决办法
14万
查看次数

通过矩阵列名称提取矩阵列值

是否可以从矩阵中按名称获取矩阵列?

我试过各种各样的方法,myMatrix["test", ]但似乎没什么用.

r matrix subset

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

R:为什么[[]]方法比使用$更快地对列表进行子集化?

我一直在研究一些项目,这些项目要求我做很多列表子集,而在分析代码时,我意识到对象[["nameHere"]]方法对子集化列表的方法通常比对象$ nameHere方法更快.

例如,如果我们创建一个包含命名组件的列表:

a.long.list <- as.list(rep(1:1000))
names(a.long.list) <- paste0("something",1:1000)
Run Code Online (Sandbox Code Playgroud)

为什么是这样:

system.time (
for (i in 1:10000) {
    a.long.list[["something997"]]
}
)


user  system elapsed 
0.15    0.00    0.16 
Run Code Online (Sandbox Code Playgroud)

比这更快:

system.time (
    for (i in 1:10000) {
        a.long.list$something997
    }
)

user  system elapsed 
0.23    0.00    0.23 
Run Code Online (Sandbox Code Playgroud)

我的问题是这种行为是否真的普遍存在,我应尽可能避免使用$ subset,还是最有效的选择取决于其他一些因素?

performance r list subset

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

根据矢量中的*not*选择R数据帧中的列

我很熟悉能够从R数据框(或矩阵)中提取列,如下所示:

df.2 <- df[, c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

但是,可以使用一个!或其他工具来选择除列出的列之外的所有列吗?

对于背景,我有一个包含很多列向量的数据框,我想避免:

  • 当我可以删除少数人时,输入大多数名字
  • 使用更短的df.2 <- df[, c(1,3,5)]因为当我的.csv文件发生变化时,我的代码就变成了问题,因为编号不再相同了.我是R的新手,并且认为我已经学会了很难不使用数字向量来获得更大的df.

我试过了:

df.2 <- df[, !c("name1", "name2", "name3")]
df.2 <- df[, !=c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

正如我输入这个,发现这有效:

df.2 <- df[, !names(df) %in% c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)

有没有比上一个更好的方法?

r subset dataframe

40
推荐指数
5
解决办法
5万
查看次数

找到总和为特定值的所有子集

给定一组数字:{1,3,2,5,4,9},找到总和为特定值的子集数(例如,本例中为9).

这类似于子集求和问题,略有不同,不是检查集合是否有一个总和为9的子集,我们必须找到这样的子集的数量.我下面的子集和问题解决 在这里.但我想知道如何修改它以返回子集的数量.

algorithm recursion subset

40
推荐指数
6
解决办法
10万
查看次数

计算一组数字的所有子集

我想找到一组整数的子集.这是带有回溯的"子集和"算法的第一步.我编写了以下代码,但它没有返回正确的答案:

BTSum(0, nums);
///**************
ArrayList<Integer> list = new ArrayList<Integer>();

public static ArrayList<Integer> BTSum(int n, ArrayList<Integer> numbers) {
    if (n == numbers.size()) {
        for (Integer integer : list) {
            System.out.print(integer+", ");
        }
        System.out.println("********************");
        list.removeAll(list);
        System.out.println();
    } else {
        for (int i = n; i < numbers.size(); i++) {
            if (i == numbers.size() - 1) {
                list.add(numbers.get(i));
                BTSum(i + 1, numbers);
            } else {
                list.add(numbers.get(i));
                for (int j = i+1; j < numbers.size(); j++)
                BTSum(j, numbers);
            }
        }
    }

    return null;
} …
Run Code Online (Sandbox Code Playgroud)

java algorithm subset

39
推荐指数
5
解决办法
8万
查看次数

具有唯一案例的子集,基于多个列

我想将数据框子集化为仅包含具有三列唯一组合的行.我的情况类似于问题中提供的情况,但我还想保留数据中的其他列.这是我的例子:

> df
  v1  v2  v3   v4  v5
1  7   1   A  100  98 
2  7   2   A   98  97
3  8   1   C   NA  80
4  8   1   C   78  75
5  8   1   C   50  62
6  9   3   C   75  75
Run Code Online (Sandbox Code Playgroud)

请求的输出将是这样的,我正在寻找仅基于v1,v2和v3的独特案例:

> df.new
  v1  v2  v3   v4  v5
1  7   1   A  100  98 
2  7   2   A   98  97
3  8   1   C   NA  80
6  9   3   C   75  75
Run Code Online (Sandbox Code Playgroud)

如果我可以恢复非常独特的行,那也很棒:

> …
Run Code Online (Sandbox Code Playgroud)

r unique subset

39
推荐指数
3
解决办法
6万
查看次数

通过要删除的行的多个逻辑条件来子集数据帧

我想通过指定哪些行not(!)保留在新数据帧中来对数据帧进行子集化(过滤).这是一个简化的示例数据帧:

data
v1 v2 v3 v4
a  v  d  c
a  v  d  d
b  n  p  g
b  d  d  h    
c  k  d  c    
c  r  p  g
d  v  d  x
d  v  d  c
e  v  d  b
e  v  d  c
Run Code Online (Sandbox Code Playgroud)

例如,如果列v1的一行有"b","d"或"e",我想摆脱那一行观察,产生以下数据帧:

v1 v2 v3 v4
a  v  d  c
a  v  d  d
c  k  d  c    
c  r  p  g
Run Code Online (Sandbox Code Playgroud)

我一次成功地基于一个条件进行子集化.例如,在这里我删除v1包含"b"的行:

sub.data <- data[data[ , 1] != "b", ] …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

37
推荐指数
5
解决办法
14万
查看次数

如何从data.frame中提取单个列作为data.frame?

说我有一个data.frame:

df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
  A  B  C
1 10 11 111
2 20 22 222
3 30 33 333
Run Code Online (Sandbox Code Playgroud)

如果我选择两个(或更多)列,我会得到一个data.frame:

x <- df[,1:2]
   A  B
 1 10 11
 2 20 22
 3 30 33
Run Code Online (Sandbox Code Playgroud)

这就是我要的.但是,如果我只选择一列,我会得到一个数字向量:

x <- df[,1]
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用as.data.frame(),它不会更改两列或更多列的结果.它确实在一列的情况下返回data.frame,但不保留列名:

x <- as.data.frame(df[,1])
     df[, 1]
1       1
2       2
3       3
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会像这样.在我看来,如果我提取一个或两个或十个列,它应该没有区别.IT应始终返回向量(或矩阵)或始终返回data.frame(具有正确的名称).我错过了什么?谢谢!

注意:这不是关于矩阵的问题的重复,因为矩阵和data.frame在R中是根本不同的数据类型,并且可以与dplyr不同地工作.有几个答案适用于data.frame但不适用于矩阵.

r subset dataframe

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

如何通过行名而不是​​数字索引删除矩阵的行?

我有矩阵g:

> g[1:5,1:5]
        rs7510853 rs10154488 rs12159982 rs2844887 rs2844888
NA06985 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06991 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06993 "CC"      "CC"       "CC"       "CC"      "CC"     
NA06994 "CC"      "CC"       "CC"       "CC"      "CC"     
NA07000 "CC"      "CC"       "CC"       "CC"      "CC"     
> rownames(g)[1:2]->remove
> remove
[1] "NA06985" "NA06991"
> g[-remove,]
Run Code Online (Sandbox Code Playgroud)

-remove中的错误:一元运算符的无效参数

有没有一种简单的方法可以做我想做的事情(从矩阵g中删除向量'remove'中引用的ID ?

注意:这只是我实际想要做的模型,请不要只是这样做g[-(1:2), ],我需要能够删除一堆我有ID-d的行.

r matrix subset rowname

34
推荐指数
3
解决办法
5万
查看次数

标签 统计

subset ×10

r ×8

dataframe ×3

algorithm ×2

matrix ×2

java ×1

list ×1

performance ×1

r-faq ×1

recursion ×1

rowname ×1

unique ×1