小编Aru*_*run的帖子

按年拆分数据

我有这样的数据:

ID    ATTRIBUTE        START          END
 1            A   01-01-2000   15-03-2010
 1            B   05-11-2001   06-02-2002
 2            B   01-02-2002   08-05-2008
 2            B   01-06-2008   01-07-2008
Run Code Online (Sandbox Code Playgroud)

我现在想要计算每年具有特定属性的不同ID的数量.

结果可能如下所示:

YEAR    count(A)    count(B)
2000          1           0
2001          1           1
2002          1           2
2003          1           1
2004          1           1
2005          1           1
2006          1           1
2007          1           1
2008          1           1
2009          1           0
2010          1           0
Run Code Online (Sandbox Code Playgroud)

我计算出现次数的第二步可能很容易.

但是,我如何将数据分成多年?

先感谢您!

split r dataframe

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

R中的列向量到矩阵

我有一组矢量V_1, V_2, ..., V_n,我想转换为矩阵.每个向量成为矩阵中的列向量.每个向量的大小是相同的.有这么简单的功能吗?在矩阵部分中The R Book,似乎不存在此函数.

我目前正在做的是:

mat=matrix(c(V1, V2, ..., VN), nrow=length(V1))
Run Code Online (Sandbox Code Playgroud)
  1. 是否有某种矩阵追加函数将列附加到矩阵的末尾?

编辑:最终目标是k-means使用此矩阵执行聚类.我的载体名称实际上并非如此V_1, V_2, ..., V_n.向量的名称是对应于数据来自的文件名的子串(这是1-1映射).最后,我将迭代特定目录中的所有文件,将数据提取到向量中,然后将每个列向量附加到矩阵.

r matrix k-means

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

如何使用其列之一的值过滤/子集data.frame

如何根据单个列中的值"截断"data.frame?例如,如果我有这个矩阵

x <- c(5,1,3,2,4)
y <- c(1,5,3,4,2)
data <- data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)

我希望所有数据的值都大于或等于x,我该怎么做?我知道我可以使用找到x值的地址

addresses <- which(x>=2)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用它来制作新的矩阵.以下不起作用:

data2 <- data[x>=2]
data2 <- data[which(x>=2)]
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供任何建议,我真的很感激.

r dataframe

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

选择R中的第2列到最后一列

我有一个包含多列的数据框.现在,我想摆脱row.names列(第1列),因此我尝试选择所有其他列.

例如,

newdata <- olddata[,2:10]
Run Code Online (Sandbox Code Playgroud)

是否有最后一列的默认符号,所以我不必计算所有列?我试过了

newdata <- olddata[,2:]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

r multiple-columns dataframe

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

如果列值与另一个向量中的列值匹配,则设置标志

假设我有data.frame如下:

a <- data.frame(id=c(1,3,4,5,7,8,9,6,54,3,5,6,87,6))
Run Code Online (Sandbox Code Playgroud)

我有一个矢量temp如下:

temp<-c(1,3,5,9)
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个新的列flag到我的data.frame,它应该1在那里idtemp0别处.这是我试过的:

a$flag <- ifelse(a$id==temp, 1, 0)
Run Code Online (Sandbox Code Playgroud)

和期望的输出应该是(1,1,0,1,0,0,1,0,0,1,1,0,0,0).

但是从我上面的代码来看,flag没有得到正确的更新.我在这里错过了什么?可以/应该使用%in%吗?如果是这样,怎么样?

感谢您的任何帮助

r

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

重命名多个数据帧中的列,R

我正在尝试重命名多个列的列data.frame.

举个例子,假设我有一个data.frames 列表dfA,dfBdfC.我写了一个函数changeNames来相应地设置名称,然后使用lapply如下:

dfs <- list(dfA, dfB, dfC)
ChangeNames <- function(x) {
    names(x) <- c("A", "B", "C" )  
}
lapply(dfs, ChangeNames)
Run Code Online (Sandbox Code Playgroud)

但是,这不能按预期工作.似乎我没有为其分配新名称data.frame,而只是创建新名称.我在这做错了什么?

先感谢您!

r dataframe

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

根据R中的匹配条件组合行中的值

我有一个关于在R中聚合值的简单问题

假设我有一个数据帧:

DF <- data.frame(col1=c("Type 1", "Type 1B", "Type 2"), col2=c(1, 2, 3))  
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

     col1 col2
1  Type 1    1
2 Type 1B    2
3  Type 2    3
Run Code Online (Sandbox Code Playgroud)

我注意到,我有Type 1Type 1B数据,所以我想结合Type 1BType 1.

所以我决定使用dplyr:

filter(DF, col1=='Type 1' | col1=='Type 1B') %>%
  summarise(n = sum(col2))
Run Code Online (Sandbox Code Playgroud)

但现在我需要坚持下去:

DF2 <- data.frame('Type 1', filter(DF, col1=='Type 1' | col1=='Type 1B') %>%
  summarise(n = sum(col2)))
Run Code Online (Sandbox Code Playgroud)

我想我想把cbind这个新的DF2重新回到原来的DF,但这意味着我必须将列名设置为一致:

names(DF2) <- c('col1', 'col2')
Run Code Online (Sandbox Code Playgroud)

好的,现在我可以回复:

rbind(DF2, DF[3,])
Run Code Online (Sandbox Code Playgroud)

结果?有效.... …

r dataframe

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

如何有效地合并两个数据集?

我试图合并两个相当大的 - 但不是荒谬的(360,000 X 4,57,000 X 4) - 一个公共ID的数据集.我已经尝试了常规merge(),merge.data.table()sqldf().每次我的内存耗尽(cannot allocate vector of size...).这有什么解决方案吗?或者R是合并数据的坏工具吗?head()给出如下(我想在STUDENT.NAME上合并):

  ID10    STUDENT.NAME   FATHER.NAME MOTHER.NAME
1    1     DEEKSHITH J       JAYANNA      SWARNA
2    4    MANIKANTHA D       DEVARAJ     MANJULA
3    5        NAGESH T   THIMMAIAH N    SHIVAMMA
4    6    NIZAMUDDIN R NOOR MOHAMMED        BIBI
5    7 PRABHU YELLAPPA      YELLAPPA    MALLAMMA
6    8    SADDAM PASHA   NISAR AHMED     ZAREENA
Run Code Online (Sandbox Code Playgroud)

memory merge memory-management r dataframe

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

R日期时间对齐和填充值

我有多个帧,为此目的假设2.每个帧包含2列 - 索引列和值列

sz<-5;
frame_1<-data.frame(index=sort(sample(1:10,sz,replace=F)),value=rpois(sz,50));
frame_2<-data.frame(index=sort(sample(1:10,sz,replace=F)),value=rpois(sz,50));
Run Code Online (Sandbox Code Playgroud)

FRAME_1:

 index value
  1    49
  6    62
  7    58
  8    30
 10    50
Run Code Online (Sandbox Code Playgroud)

frame_2:

index value
  4    60
  5    64
  6    48
  7    46
  9    57
Run Code Online (Sandbox Code Playgroud)

目标是创建第三帧frame_3,其索引将是frame_1和frame_2中的索引的并集,

frame_3<-data.frame(index = sort(union(frame_1$index,frame_2$index)));
Run Code Online (Sandbox Code Playgroud)

它将包含两个额外的列,value_1和value_2.

frame_3 $ value_1将从frame_1 $ value中填写,frame_3 $ value_2将从frame_2 $ value中填写;

这些应该填写如下:frame_3:

index value_1 value_2
1      49       NA
4      49       60     # value_1 is filled through with previous value
5      49       64     # value_1 is filled through with previous value
6      62       48     
7      58 …
Run Code Online (Sandbox Code Playgroud)

r vectorization dataframe

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

将一列拆分为多列

我有一个庞大的数据集,其中有一列包含每个主题(行)的几个值.这是一个简化的示例数据帧:

data <- data.frame(subject = c(1:8), sex = c(1, 2, 2, 1, 2, 1, 1, 2), 
              age = c(35, 29, 31, 46, 64, 57, 49, 58), 
              v1 = c("2", "0", "3,5", "2 1", "A,4", "B,1,C", "A and B,3", "5, 6 A or C"))

> data
  subject sex age          v1
1       1   1  35           2
2       2   2  29           0
3       3   2  31         3,5  # separated by a comma
4       4   1  46         2 1  # separated by a blank …
Run Code Online (Sandbox Code Playgroud)

r

7
推荐指数
2
解决办法
5447
查看次数