首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要一个R函数来通过Y计数复制X数据,其中X包含一些重复的值

需要一个R函数来通过Y计数复制X数据,其中X包含一些重复的值
EN

Stack Overflow用户
提问于 2021-12-01 19:54:33
回答 3查看 44关注 0票数 1

我有一个相当大的数据集(18,000行),其中有2列没有兴趣。我想把一个(X)作为定量值,另一个(Y)作为计数,并根据计数重复X数据。由于数据的性质,X列中有重复值,我只想创建一个包含所有X值及其重复测量值的新数据集。我尝试执行以下操作,但它返回一个无效的时间参数:rep, df$X, df$Y

我不知道为什么会发生这个错误,也不知道从这里往哪里走。任何帮助都是非常感谢的。下面是我的数据的一个小样本。

代码语言:javascript
复制
8.76    3
24.69   0
6.24    2
1.17    0
6.54    3
10.29   0
11.04   1
16.71   1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-01 20:03:04

当一个或多个YNA (或负)时,我可以再现该错误:

代码语言:javascript
复制
df
#       X  Y
# 1  8.76  3
# 2 24.69 NA
# 3  6.24  2
# 4  1.17  0
# 5  6.54  3
# 6 10.29  0
# 7 11.04  1
# 8 16.71  1
rep(df$X, df$Y)
# Error in rep(df$X, df$Y) : invalid 'times' argument
df$Y[2] <-  -1
rep(df$X, df$Y)
# Error in rep(df$X, df$Y) : invalid 'times' argument

我们可以用NA替换0

代码语言:javascript
复制
rep(df$X, pmax(0, df$Y, na.rm = TRUE))
#  [1]  8.76  8.76  8.76  6.24  6.24  6.54  6.54  6.54 11.04 16.71

数据

代码语言:javascript
复制
df <- structure(list(X = c(8.76, 24.69, 6.24, 1.17, 6.54, 10.29, 11.04, 16.71), Y = c(3L, NA, 2L, 0L, 3L, 0L, 1L, 1L)), row.names = c(NA, -8L), class = "data.frame")
票数 2
EN

Stack Overflow用户

发布于 2021-12-01 20:00:21

也许你在找uncount

代码语言:javascript
复制
library(tidyr)
library(dplyr)

df %>% 
  uncount(count)

这会返回

代码语言:javascript
复制
# A tibble: 10 x 1
   value
   <dbl>
 1  8.76
 2  8.76
 3  8.76
 4  6.24
 5  6.24
 6  6.54
 7  6.54
 8  6.54
 9 11.0 
10 16.7 
票数 2
EN

Stack Overflow用户

发布于 2021-12-01 20:31:42

A基本R备选方案:

代码语言:javascript
复制
transform(df[rep(seq_len(nrow(df)), df$y),], y = sequence(df$y))

产出:

代码语言:javascript
复制
        x y
1    8.76 1
1.1  8.76 2
1.2  8.76 3
3    6.24 1
3.1  6.24 2
5    6.54 1
5.1  6.54 2
5.2  6.54 3
7   11.04 1
8   16.71 1

数据:

代码语言:javascript
复制
df <- structure(list(x = c(8.76, 24.69, 6.24, 1.17, 6.54, 10.29, 11.04, 
16.71), y = c(3L, 0L, 2L, 0L, 3L, 0L, 1L, 1L)), class = "data.frame", row.names = c(NA, 
-8L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70190468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档