标签: subset

计算data.frame子集中数字的出现次数

我在R中有一个数据帧,类似于以下内容.实际上我真正的"df"数据框架比这里的数据框架大得多,但我真的不想让任何人感到困惑,所以这就是为什么我尽量简化事情.

所以这是数据框架.

id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)   
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,3)

df <-data.frame(id,a,b,c,d,e)
df
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是获取每列(a,b,c,d,e)和每个id组(1,2,3)的数字出现(对于后面的分组,请参阅我的列'id ").

因此,对于列'a'和id号'1'(后者见列'id'),代码将是这样的:

as.numeric(table(df[1:10,2]))

##The results are:
[1] 3 7
Run Code Online (Sandbox Code Playgroud)

只是简单地解释一下我的结果:在'a'栏中(并且仅关注那些'id'栏中编号为'1'的记录)我们可以说数字'1'出现3次而数字'3'出现7次.

再次,只是为了向您展示另一个例子.对于列'a'和id号'2'(对于后一个分组,请再次查看列'id'):

as.numeric(table(df[11:20,2]))

##After running the codes the results are: 
[1] 4 3 3
Run Code Online (Sandbox Code Playgroud)

让我再解释一下:在'a'栏中,只关注那些在'id'栏中有数字'2'的观察,我们可以说数字'1'出现4次,数字'2'出现3次和数字'3'发生了3次.

所以这就是我想做的.计算每个自定义子集的数字出现次数(然后将这些值收集到数据框中).我知道这不是一项艰巨的任务,但问题是我必须定期更改输入'df'数据帧,因此行和列的总数可能随时间而变化......

到目前为止我所做的是我将'df'数据帧与列分开,如下所示:

for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
Run Code Online (Sandbox Code Playgroud)

所以df.2将引用df $ a,df.3将等于df $ b,df.4将等于df $ c等.但我现在真的被卡住了,我不知道如何继续前进...

是否有适当的"自动"方式来解决这个问题?

r subset

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

每日时间序列(动物园)的冬季(Dez,Jan,Feb)

我有一个每日动物园(xts),有几十年的数据,格式如下:

head(almorol)
1973-10-02 1973-10-03 1973-10-04 1973-10-05 1973-10-06 1973-10-07
     183.9      208.2      153.7       84.8       52.5       35.5
Run Code Online (Sandbox Code Playgroud)

我想绘制冬季数据(12月,1月和2月的整月).我找到了xts的子集,所以我想我可以使用以下方法提取所有的Decembers:

x<-apply.yearly(almorol, FUN=last(almorol, "1 month"))
Run Code Online (Sandbox Code Playgroud)

然后在Jan和Feb做类似的事情,但是我收到以下错误:

Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'FUN' of mode 'function' was not found
Run Code Online (Sandbox Code Playgroud)

我可以单独使用apply.yearly和,last(almorol, "1 month")但是当我将它们组合起来时它不起作用.有没有人知道如何对这3个月的时间序列进行子集化?谢谢你的帮助!

r subset zoo

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

subset()一个因子的观察次数

我有subset()函数的问题.如何通过观察次数对我的数据帧的因子进行子集化?

   NAME      CLASS         COLOR   VALUE      
   antonio       B          YELLOW       5
   antonio       B          BLUE       8
   antonio       B          BLUE       7 
   antonio       B          BLUE      12 
   luca          C          YELLOW    99
   luca          B          YELLOW    87
   luca          B          YELLOW    98
   giovanni      A          BLUE      48
Run Code Online (Sandbox Code Playgroud)

我想获得数据,其中"NAME","CLASS"和"COLOR"三个因子至少比较三次,以便得出VALUE的平均值.在这种情况下,我将获得:

   NAME      CLASS         COLOR   VALUE      
   antonio       B          BLUE       mean
Run Code Online (Sandbox Code Playgroud)

因为antonio是每个因素唯一的三个观察结果

非常感谢

r frequency subset

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

选择变量值等于某个向量的行

我有一个df超过1000人的纵向数据,如下所示:

id  year    name    status  
1   1984    James   4   
1   1985    James   1   
2   1983    John    2   
2   1984    John    1   
3   1980    Amy     2   
3   1981    Amy     2   
4   1930    Jane    4   
4   1931    Jane    5   
Run Code Online (Sandbox Code Playgroud)

我正在尝试确定数据的子集id.例如,我有一个ddid我想要分组的s 组成的向量:

dd<-c(1,3)
Run Code Online (Sandbox Code Playgroud)

我尝试过以下但是没有用,例如:

subset<-subset(df, subset(df$id==dd))
Run Code Online (Sandbox Code Playgroud)

要么

subset<-subset(df, subset(unique(df$id))==dd))
Run Code Online (Sandbox Code Playgroud)

要么

subset<-df[which(unique(df$id)==dd),]
Run Code Online (Sandbox Code Playgroud)

或者我试过一个for循环

for (i in 1:2){
  subset<-subset(df, subset=(unique(df$id)==dd[i]))
}
Run Code Online (Sandbox Code Playgroud)

是否有办法只选择ids与矢量中的数字相匹配的行dd

row r subset

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

基于频率水平的子集

我想生成一个df,它选择与"ID"相关联的行,而"ID"又与一个名为cutoff的变量相关联.对于此示例,我将cutoff设置为9,这意味着我想在df1中选择其ID值与超过9行相关联的行.我的代码的最后一行生成了一个我不明白的df.正确的df将有24行,ID列中都有3行或4行.有人可以解释我的最后一行代码实际上在做什么并建议采用不同的方法吗?

set.seed(123)
ID<-rep(c(1,2,3,4,5),times=c(5,7,9,11,13))
sub1<-rnorm(45)
sub2<-rnorm(45)
df1<-data.frame(ID,sub1,sub2)
IDfreq<-count(df1,"ID")
cutoff<-9
df2<-subset(df1,subset=(IDfreq$freq>cutoff))
Run Code Online (Sandbox Code Playgroud)

r frequency subset

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

如何对data.frame进行子集化?

我有这样的数据集

a <- data.frame(var1 = c("patientA", "patientA", "patientA", "patientB", "patientB", "patientB", "patientB"),
                var2 = as.Date(c("2015-01-02","2015-01-04","2015-02-02","2015-02-06","2015-01-02","2015-01-07","2015-04-02")),
                var3 = c(F, T, F, F, F, T, F)               
                )
sequ <- rle(as.character(a$var1))
a$sequ <- sequence(sequ$lengths)
Run Code Online (Sandbox Code Playgroud)

生产

> a
      var1       var2  var3 sequ
1 patientA 2015-01-02 FALSE    1
2 patientA 2015-01-04  TRUE    2
3 patientA 2015-02-02 FALSE    3
4 patientB 2015-02-06 FALSE    1
5 patientB 2015-01-02 FALSE    2
6 patientB 2015-01-07  TRUE    3
7 patientB 2015-04-02 FALSE    4
Run Code Online (Sandbox Code Playgroud)

我如何对这个数据集进行子集化/过滤,以便获得var3 == TRUE和var2日期values的数据的数据的VAR3 == TRUE的行(患者,var1?我试过了)

subset(a, (var3 …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

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

根据多个列值获取数据子集

我试图根据第2列和第3列是否包含0来删除行.我一直得到非常奇怪的结果.我试图在没有subset最初的情况下编写它,因为我读了一些subset因为内存成本而应该只用于少量数据的地方.然而,这两项尝试都没有对我有用.谁能解释我做错了什么?

df <- data.frame(val1=c(1,2,3), val2=c(4,0,5), val3=c(3,0,6))
subset(df,df>0,c(2,3))
data.frame(df[df[,c(2,3)]!=0])
Run Code Online (Sandbox Code Playgroud)

最终目标:

   val1   val2   val3
1  1       4       3
1  2       0       0
3  3       5       6
Run Code Online (Sandbox Code Playgroud)

r subset

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

使用subset或dplyr :: filter时,过滤R中的行会意外删除NAs

我有一个数据集df,我想删除变量y没有值的所有行a.变量y还包含一些NAs:

df <- data.frame(x=1:3, y=c('a', NA, 'c'))
Run Code Online (Sandbox Code Playgroud)

我可以使用R的索引语法实现这一点,如下所示:

df[df$y!='a',]

  x    y
  2 <NA>
  3    c
Run Code Online (Sandbox Code Playgroud)

注意这会返回NA值和值c- 这就是我想要的.

然而,当我使用同样的尝试subset或者dplyr::filter,将NA被剥离出来:

subset(df, y!='a')

  x    y
  3    c

dplyr::filter(df, y!='a')
  x    y
  3    c
Run Code Online (Sandbox Code Playgroud)

为什么subsetdplyr::filter这样的工作吗?这对我来说似乎不合逻辑 - 这NA是不一样的a,所以为什么要删除NA当我指定我想要除变量y等于的那些行之外的所有行a

除了明确要求NAs返回之外,还有一些方法可以改变这些函数的行为,即

subset(df, y!='a' | is.na(y))
Run Code Online (Sandbox Code Playgroud)

谢谢

r subset filter dplyr

3
推荐指数
2
解决办法
759
查看次数

基于具有重复观察的向量的子集数据

我有以下数据,每个主题有两个观察结果:

SUBJECT <- c(8,8,10,10,11,11,15,15)
POSITION <- c("H","L","H","L","H","L","H","L")
TIME <- c(90,90,30,30,30,30,90,90)
RESPONSE <- c(5.6,5.2,0,0,4.8,4.9,1.2,.9)

DATA <- data.frame(SUBJECT,POSITION,TIME,RESPONSE)
Run Code Online (Sandbox Code Playgroud)

我想要DATA的行,其中SUBJECT数字在向量中,V:

V <- c(8,10,10)
Run Code Online (Sandbox Code Playgroud)

如何从SUB的SUBJECT编号为V的DATA中获取两个观察结果,并且这些观察结果的重复次数与V中相应的SUBJECT编号重复的次数相同?

期望的结果:

SUBJECT <- c(8,8,10,10,10,10)
POSITION <- c("H","L","H","L","H","L")
TIME <- c(90,90,30,30,30,30)
RESPONSE <- c(5.6,5.2,0,0,0,0)

OUT <- data.frame(SUBJECT,POSITION,TIME,RESPONSE)
Run Code Online (Sandbox Code Playgroud)

我认为%in%运算符的某些变化可以解决这个问题,但它没有考虑V中重复的主题数.即使主题数在V中列出两次,我只得到DATA中相应行的一个副本.

我还可以创建一个循环并附加匹配的观察结果,但是这个部分位于一个bootstrap采样器中,这个选项会大大增加计算时间.

r subset

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

功率设定解决方案**O(n)时间**和**O(n)空间**复杂性?

是否有可能在O(n)时间O(n)空间复杂度中找到所有可能的集合子集(即幂集) ?

程序设置 >> {a,b,c}

预计输入O(n)时间和O(n)空间复杂度,这里n为3.

{},{a},{b},{c},{a,b},{b,c},{a,c},{a,b,c}

algorithm big-o subset subset-sum

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

标签 统计

subset ×10

r ×9

frequency ×2

algorithm ×1

big-o ×1

dataframe ×1

dplyr ×1

filter ×1

row ×1

subset-sum ×1

zoo ×1