我在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等.但我现在真的被卡住了,我不知道如何继续前进...
是否有适当的"自动"方式来解决这个问题?
我有一个每日动物园(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个月的时间序列进行子集化?谢谢你的帮助!
我有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是每个因素唯一的三个观察结果
非常感谢
聂
我有一个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
.例如,我有一个dd
由id
我想要分组的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)
是否有办法只选择id
s与矢量中的数字相匹配的行dd
?
我想生成一个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) 我有这样的数据集
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) 我试图根据第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) 我有一个数据集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)
为什么subset
而dplyr::filter
这样的工作吗?这对我来说似乎不合逻辑 - 这NA
是不一样的a
,所以为什么要删除NA
当我指定我想要除变量y
等于的那些行之外的所有行a
?
除了明确要求NAs
返回之外,还有一些方法可以改变这些函数的行为,即
subset(df, y!='a' | is.na(y))
Run Code Online (Sandbox Code Playgroud)
谢谢
我有以下数据,每个主题有两个观察结果:
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采样器中,这个选项会大大增加计算时间.
是否有可能在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}