小编rw2*_*rw2的帖子

从另一个向量中删除向量中第一次出现的元素

我有一个字符向量,包括一些重复的元素,例如

v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13")
Run Code Online (Sandbox Code Playgroud)

另一个向量包括这些字符的单个计数,例如

x <- c("d10", "d11", "d13")
Run Code Online (Sandbox Code Playgroud)

我想从第二个向量中仅删除每个元素的第一个出现位置.在此示例中,发生在两次,但仅删除第一个匹配,并保留副本.因此,我想最终得到:xvd13xvv

"d09", "d01", "d02", "d13"
Run Code Online (Sandbox Code Playgroud)

我一直在尝试各种各样的东西,z <- v[!(v %in% x)] 但它不断删除所有角色的实例x,而不仅仅是第一个,所以我最终得到了这个:

"d09", "d01", "d02"
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能删除重复元素的一个实例?

r duplicates

14
推荐指数
1
解决办法
1433
查看次数

更快地相当于group_by%&gt;%R中的展开

我正在尝试为R中的多个ID创建年份序列。我的输入表的每个ID都有一行,并提供了一个Start_year。看起来像这样:

ID    Start_year
01          1999
02          2004
03          2015
04          2007
Run Code Online (Sandbox Code Playgroud)

等等...

我需要为每个ID创建一个包含多行的表,以显示从其Start_year到2015年的每一年。然后,我将使用此表连接到另一个表。因此,在我的示例中,ID1在1999:2015年将有17行。ID2将具有12行2004:2015,ID3将具有1行2015,ID4将具有9行2007:2015。

对于我的数据的子集,我可以使用以下代码来使其工作:

df %>% group_by(ID) %>% expand(year = Start_year:2015, Start_year) %>% select(-Start_year)
Run Code Online (Sandbox Code Playgroud)

但是,我的完整数据集有大约500万个ID,此命令似乎非常慢,耗时数小时。

因此,我正在R中寻找该命令的更快实现。以我的经验,data.table命令似乎通常比dplyr / tidyr更快-但是,我对data.table语法并不熟悉。

r data-manipulation dplyr data.table

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

加入数据框并在有多个匹配时选择随机行

我有一个参考数据框 (df1),其中包含三列“特征”(性别、年份、代码)和两列“值”(数量、状态)。它看起来像这样,但有很多行:

gender    year    code    amount   status
     M    2011       A        15      EMX
     M    2011       A       123      NOX
     F    2015       B         0      MIX
     F    2018       A        12      NOX
     F    2015       B        11      NOX
Run Code Online (Sandbox Code Playgroud)

我有另一个数据框(df2),它只有三个“特征”列。例如:

gender    year   code
     M    2011      A
     M    2011      A
     F    2018      A
     F    2015      B
Run Code Online (Sandbox Code Playgroud)

对于 df2 中的每一行,我想根据“特性”中的匹配将“值”分配给 df1。如果有多个匹配项,我想随机选择成对的“值”。因此,当 df2 中存在重复的“特征”时,它们最终可能会得到不同的“值”对,但它们在 df1 中都将完全匹配。本质上,对于每个特征组合,我希望值的分布在两个表之间匹配。

例如,“df2”中的最后一行(性别 = F,年份 = 2015,代码 = B)匹配“df1”中的两行:第三行(amont = 0,状态 = MIX)和第五行(金额 = 11,状态 = NOX)。然后应该随机选择这些匹配行之一。对于所有此类基于性别、年份和代码在 'df2' 和 'df1' 之间进行多次匹配的情况,应随机选择一行。


到目前为止,我的方法是首先使用在两个数据帧之间dplyr做一个left_join。但是,这为 …

join r dplyr data.table

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

R中没有替换或重复的样本

我有一个很长的列表,其中包含相当多的重复项,例如100,000个值,其中20%是重复的.我想从这个列表中随机抽样,将所有值分组,比如400个.但是,我不希望任何后续组在其中包含重复值 - 即我希望每个组的所有250个成员都是唯一的.

我尝试过使用素食主义者,picante,EcoSimR的各种排列方法,但是他们没有做我想做的事情,或者似乎对大量数据感到困惑.

我想知道是否有一些方法使用我无法弄清楚的样本函数?任何帮助或替代建议将不胜感激......

r permutation random-sample

2
推荐指数
1
解决办法
7747
查看次数

将"实际年份"列更改为相对于另一列中的值的列

我有一个如下所示的数据表:

ID    Start_Year    Payment_2010    Payment_2011    Payment_2012    Payment_2013
 1          2010              19              15              NA              11
 2          2012              22              24              26              23
 3          2012              NA              NA              NA              05   
 4          2011              17              NA              14              NA       
Run Code Online (Sandbox Code Playgroud)

对于许多行,它都是这样的,总共有大约20年的付款列.

我需要使用R或SQL重新定义它,当前的Payment列替换为第一列(Payment_1)表示Start_Year列中的值的列,并且列从那里开始依次进行.例如,我想让上面的表看起来像这样:

ID    Start_Year    Payment_1    Payment_2    Payment_3    Payment_4
 1          2010           19           15           NA           11
 2          2012           26           23           NA           NA
 3          2012           NA           05           NA           NA   
 4          2011           NA           14           NA           NA    
Run Code Online (Sandbox Code Playgroud)

因此,可以放弃在开始年份之前的第一个表中的任何付款信息.如果付款信息不可用,则该值应为NULL或NA(不为零,因为这些与我的数据中的NA不同).

我开始尝试使用动态SQL基于Start_year列创建新列,但是卡住了.我通过使用扩展和收集来自R中的dplyr包的命令更接近,但我的管道一直出错,我找不到丢弃start_year值之前的付款信息的方法.

任何帮助非常感谢,非常感谢提前.

(我知道这是一种奇怪的格式,希望将数据输入,但这就是我需要做的事情).

sql r data-manipulation dplyr data.table

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