我有一个字符向量,包括一些重复的元素,例如
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中的多个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语法并不熟悉。
我有一个参考数据框 (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。但是,这为 …
我有一个很长的列表,其中包含相当多的重复项,例如100,000个值,其中20%是重复的.我想从这个列表中随机抽样,将所有值分组,比如400个.但是,我不希望任何后续组在其中包含重复值 - 即我希望每个组的所有250个成员都是唯一的.
我尝试过使用素食主义者,picante,EcoSimR的各种排列方法,但是他们没有做我想做的事情,或者似乎对大量数据感到困惑.
我想知道是否有一些方法使用我无法弄清楚的样本函数?任何帮助或替代建议将不胜感激......
我有一个如下所示的数据表:
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值之前的付款信息的方法.
任何帮助非常感谢,非常感谢提前.
(我知道这是一种奇怪的格式,希望将数据输入,但这就是我需要做的事情).