例如,假设您有以下数据框:
ID<-c("11", "12", "13", "14", "14")
Date<-c("2020-01-01", "2020-02-01", "2020-03-15", "2020-04-10", "2020-06-01")
Item<-c("Item1", "Item1", "Item2", "Item2", "Item2")
ItemPrice<-c(5, 5, 7, 7, 7)
Quantity<-c(1, 2, -2, 2, 3)
Cost<-c(5, 10, -14, 14, 21)
df<-data.frame(ID, Date, Item, ItemPrice, Quantity, Cost)
df
ID Date Item ItemPrice Quantity Cost
1 11 2020-01-01 Item1 5 1 5
2 12 2020-02-01 Item1 5 2 10
3 13 2020-03-15 Item2 7 -2 -14
4 14 2020-04-10 Item2 7 2 14
5 14 2020-06-01 Item2 7 3 21
Run Code Online (Sandbox Code Playgroud)
但是,您希望按以下方式分隔行, …
我有一个像 DF
现在我想用 15 替换 Col B = NA,因为这是缺失值。C 列第一个 NA 为 14,第二个 NA 为 15。D 列第一个 NA 为 13,第二个 NA 为 14,第三个 NA 为 15。因此数字遵循从上到下或从下到上的顺序。
可重现的样本数据
structure(list(`Col A` = c(11, 12, 13, 14, 15), `Col B` = c(NA,
11, 12, 13, 14), `Col C` = c(NA, NA, 11, 12, 13), `Col D` = c(NA,
NA, NA, 11, 12)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud) 我有示例数据如下:
library(data.table)
sample <- fread("
1,0,2,NA,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type 3
3,4,3,0,cat X, type 4
1,0,2,NA,cat Y, type 1
3,4,3,NA,cat Y, type 2
1,0,2,2,cat Y, type 3
3,4,3,35,cat Y, type 4
1,0,2,NA,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type 3
3,4,3,NA,cat X, type 4
1,0,2,NA,cat Y, type 1
3,4,3,NA,cat Y, type 2
1,0,2,2,cat Y, type 3
3,4,3,1,cat Y, type 4
1,0,2,4,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type …Run Code Online (Sandbox Code Playgroud) 我有 4 个包含不同元素的列表。如何提取和计算至少 2 个或更多列表中共享的元素数量?
例如:
a=c(1,2,3,4,5,6,7)
b=c(1,4,5,7,8)
c=c(2,5,9,10)
d=c(11,12,13,14)
Run Code Online (Sandbox Code Playgroud)
答案应该是:元素 1、2、4 和 7 计数为 4。
我在 R 中有以下数据:
structure(list(Name = 1:4, Paper1 = c("C1", "C1", "C1", "C1"),
Marks1 = 1:4, Paper2 = c("D1", "D1", "D1", "D1"), Marks2 = 1:4,
Paper3 = c("E1", "E1", "E1", "E1"), Marks3 = 12:15), class = "data.frame", row.names = c(NA, -4L))
Run Code Online (Sandbox Code Playgroud)
我想这样安排我的数据:
structure(list(Name = c(1L, 1L, 1L, 2L, 2L, 2L), Paper = c("C1",
"D1", "E1", "C1", "D1", "E1"), Marks = c(1L, 1L, 12L, 2L, 2L,
13L)), class = "data.frame", row.names = c(NA, -6L))
Run Code Online (Sandbox Code Playgroud)
我尝试过shape,,,melt但两者都没有提供所需的输出。请提出解决方案。
我花了一段时间才明白,当在具有粘合语法列名的 mutate 函数中使用时,函数中的列名必须是 ensym。理由是什么?为什么我必须使用 ensym?为什么 和 不够{{}}用{}?
工作正常:
a <- 1:5
data_set <- tibble(a,x=a*2)
test_function <- function(data,var_x){
var_x <- ensym(var_x)
data %>% mutate("is_four_in_{var_x}":=if_else({{var_x}}==4,{{var_x}},NA_integer_)) %>%
return()
}
data_set %>% test_function(x)
Run Code Online (Sandbox Code Playgroud)
但如果
var_x <- ensym(var_x) 被删除,我得到
Error in eval(parse(text = text, keep.source = FALSE), envir) :
Run Code Online (Sandbox Code Playgroud)
object 'x' not found
Run Code Online (Sandbox Code Playgroud) 我有一个V长度为 的连续整数向量l,例如1, 2, 3, 4, 5, 6, 7。我想找到大小的所有子集,k使得子集中任意两个数字之间的差值不能小于m,例如2。使用上面的示例l = 7、k = 3和m = 2,子集是
1, 3, 5
1, 3, 6
1, 3, 7
1, 4, 6
1, 4, 7
1, 5, 7
2, 4, 6
2, 4, 7
2, 5, 7
3, 5, 7
Run Code Online (Sandbox Code Playgroud)
一种方法是枚举所有可能的大小子集k并丢弃任何不满足m约束的子集,但即使解决方案的数量很小,此过程也会爆炸。
我当前的方法是一种暴力算法,其中我从具有最小可能整数的子集开始,将最后一个条目增加 1,直到达到上限,增加前一个条目并将最后一个条目重置为可以的最低值鉴于先前条目的增加。也就是说,我从 开始1, 3, 5,然后将最后一位数字加一以获得1, 3, 6和1, 3, …
该序列将类似于:
"4122222222222281222222211111212"
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
"1222222222222"
"12222222"
"12"
"12"
Run Code Online (Sandbox Code Playgroud)
您可以看到该模式中可以有任意数量的“2”。
有没有办法在R中找到这样的模式?
x <- rep(c("A","B","C"),times=c(6,8,3))
"A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" "B" "B" "C" "C" "C"
Run Code Online (Sandbox Code Playgroud)
我正在努力创建一个向量,该向量对应于每个字母被恰好分为 3 个容器:
(A A A A A A B B B B B B B B C C C)
x_bin = 1 1 2 2 3 3 1 1 1 2 2 2 3 3 1 2 3
Run Code Online (Sandbox Code Playgroud)
在此示例中,我可以A通过组合每 2 个值将其分为 3 个容器。我可以B通过组合 3、3 和 2 个值将其分为 3 个容器。我只能C通过组合 1 个值来分为 3 个 …
我有以下代码位于优化例程中。因此,虽然速度相当快,但分析显示产生结果的行被称为res我的代码中最大的瓶颈。
我尝试了很多方法来改进这一点,并最终得到了最后一行:
res <- exp(X %*% log(pr.t) + mX %*% log(1 - pr.t)) %*% wts
Run Code Online (Sandbox Code Playgroud)
在我的问题中,矩阵的元素X是固定的,并且不会随着迭代而改变。因此,我还可以计算、存储和回收X和mX。每次迭代发生的变化是我在对象中计算的一些概率pr.t。
我尝试过 Rcpp,但 Rcpp 与我工作中的 R 代码一样快。
我现在向这个小组发出呼吁,看看是否有人能找到一种绝妙的方法来加快最终产品的生产线速度res。下面是设置问题的示例代码,给出了实际问题的可重现示例。
X <- matrix(sample(c(0,1), 5000, replace = TRUE), 1000, 5)
mX <- 1 - X
pr.t <- matrix(runif(75), 5, 15)
wts <- runif(15)
res <- exp(X %*% log(pr.t) + mX %*% log(1 - pr.t)) %*% wts
Run Code Online (Sandbox Code Playgroud) r ×10
data.table ×2
dataframe ×2
performance ×2
algorithm ×1
combinations ×1
dplyr ×1
enumeration ×1
imputation ×1
matrix ×1
melt ×1
na ×1
pivot ×1
regex ×1
reshape ×1
sequence ×1
split ×1
string ×1
syntax ×1
vector ×1