鉴于半长的格式ID为变量DF a和b和测定在列中的数据m1和m2.数据类型由变量指定v(值var1和var2).
set.seed(8)
df_l <-
data.frame(
a = rep(sample(LETTERS,5),2),
b = rep(sample(letters,5),2),
v = c(rep("var1",5),rep("var2",5)),
m1 = sample(1:10,10,F),
m2 = sample(20:40,10,F))
Run Code Online (Sandbox Code Playgroud)
看起来像:
a b v m1 m2
1 W r var1 3 40
2 N l var1 6 32
3 R a var1 9 28
4 F g var1 5 21
5 E u var1 4 38
6 W r var2 1 35
7 N l var2 8 33
8 R …Run Code Online (Sandbox Code Playgroud) 这个ifelse声明有什么问题.
df <- data.frame(var1=c('ABC','CAB', 'AB'))
dplyr::mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', var1))
Run Code Online (Sandbox Code Playgroud)
给
var1 var2
1 ABC AB-starter
2 CAB 3
3 AB AB-starter
Run Code Online (Sandbox Code Playgroud)
我想(使用mutate和ifelse语句)var2的第二个元素中var1的值(即'var1'不以"AB"开头):
var1 var2
1 ABC AB-starter
2 CAB CAB
3 AB AB-starter
Run Code Online (Sandbox Code Playgroud) set.seed(8)
df <- data.frame(
A=sample(c(1:3), 10, replace=T),
B=sample(c(1:3), 10, replace=T),
C=sample(c(1:3), 10, replace=T),
D=sample(c(1:3), 10, replace=T),
E=sample(c(1:3), 10, replace=T),
F=sample(c(1:3), 10, replace=T))
Run Code Online (Sandbox Code Playgroud)
想要将列的子集传递给dplyr mutate()并进行逐行计算,例如cor()在列AC和DF之间获得相关性,但无法弄清楚如何.在这里,这里和这里找到了SO的灵感,但却未能产生可接受的代码.例如,我试过这个:
require(plyr)
require(dplyr)
df %>%
rowwise() %>%
mutate(c=cor(.[[1:3]],.[[4:6]]))
Run Code Online (Sandbox Code Playgroud) 这个问题链接到这个SO答案,除了在这里我想使用在a中指定为函数arg的变量mutate_().如果我不做任何"计算",它的工作原理是mutate_():
data <-
data.frame(v1=c(1,2),
v2=c(3,4))
func1 <- function(df, varname){
res <-
df %>%
mutate_(v3=varname)
return(res)
}
func1(data, "v1")
Run Code Online (Sandbox Code Playgroud)
这给了预期:
v1 v2 v3
1 1 3 1
2 2 4 2
Run Code Online (Sandbox Code Playgroud)
但如果我做这样的事情,似乎我没有正确指定"v3":
func2 <- function(df, varname){
res <-
df %>%
mutate_(v3=sum(varname))
return(res)
}
func2(data, "v1")
Run Code Online (Sandbox Code Playgroud)
不起作用; 为什么它不等同于函数之外?:
data %>%
mutate(v3=sum(v1))
Run Code Online (Sandbox Code Playgroud)
得到:
v1 v2 v3
1 1 3 3
2 2 4 3
Run Code Online (Sandbox Code Playgroud)
更新(在@docendo discimus的解决方案之后):关于使用lazyeval::interp()工作的解决方案.但是,如果有一个更复杂的功能,我似乎得到了很多打字.例如.我想要一个函数,可以在计数数据框中为所有NP组合返回得分和fisher的2x2 pvalue,c.
require(plyr)
require(dplyr)
require(lazyeval)
set.seed(8)
df <-
data.frame(
N …Run Code Online (Sandbox Code Playgroud) library(ggplot2)
data <-
data.frame(
group=factor(c("a","c","b","b","c","a")),
x=c("A","B","C", "D","E","F"),
y=c(3,2,10,11,4,5))
> data
group x y
1 a A 3
2 c B 2
3 b C 10
4 b D 11
5 c E 4
6 a F 5
#And plot this:
ggplot(data)+
geom_bar(aes(x=x, y=y, fill=group, order=group),
stat="identity",
position="dodge")+
coord_flip()
Run Code Online (Sandbox Code Playgroud)
这给出了一个图,其中 x 根据因子水平绘制:

但是如何根据group变量的自定义顺序对 x 重新排序,同时group按照降序排列y。例如,如果我想先绘制“c”(红色)、“a”(绿色)和“b”(蓝色)组,x 轴(x变量)的绘制顺序将是:E、B、 F、A、D、C。请注意,这可能与此SO 问题相似。
这是非常基本的(我怀疑其他地方已经问过这个问题,尽管这里不完全是这样)。
我有大量 .rda 文件,每个文件都有一个数据帧。我想对每个数据帧进行计算,因此需要加载它们(load())。如果它们是 .RDS 对象,我会这样:
#My data
x <- data.frame(a=1:3)
y <- data.frame(a=3:6)
#Save as RDS
saveRDS(x, file = "x.rds")
saveRDS(y, file = "y.rds")
files <- c("x.rds", "y.rds")
data <- lapply(files, readRDS)
#Do something with the data in the list "data"
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用做类似的事情,load因为你不能将数据(只能是名称)分配给变量:
x <- data.frame(a=1:3)
> x
a
1 1
2 2
3 3
save(x, file= "x.rda")
x <- load("x.rda")
> x
[1] "x"
Run Code Online (Sandbox Code Playgroud) s <- "1-343-43Hello_2_323.14_fdh-99H"
Run Code Online (Sandbox Code Playgroud)
在RI中想要使用正则表达式来获取子串,比如说第二个下划线.如何使用一个正则表达式完成这项工作?另一种方法是用'_'分割然后粘贴前两个 - 一些东西;
paste(sapply(strsplit(s, "_"),"[", 1:2), collapse = "_")
Run Code Online (Sandbox Code Playgroud)
得到:
[1] "1-343-43Hello_2"
Run Code Online (Sandbox Code Playgroud)
但是我如何制作正则表达式来做同样的事情呢?
我认为这个问题有多种其他变化(例如:here,here ,也许here) - 甚至可能是某个地方的答案。
如何为过滤器函数提供参数。
library(dplyr)
library(lazyeval)
set.seed(10)
data <- data.frame(a=sample(1:10, 100, T))
Run Code Online (Sandbox Code Playgroud)
如果我需要计算数字 1 到 10 的出现次数并显示计数,比如 1、2 和 3,我会这样做:
data %>%
group_by(a) %>%
summarise(n = n()) %>%
filter(a < 4)
Run Code Online (Sandbox Code Playgroud)
给出:
# A tibble: 3 × 2
a n
<int> <int>
1 1 11
2 2 8
3 3 16
Run Code Online (Sandbox Code Playgroud)
现在,我怎样才能把它放到一个函数中?这grp是分组变量。
fun <- function(d, grp, no){
d %>%
group_by_(grp) %>%
summarise_(n = interp(~ n() )) %>%
filter_( grp < no)
# …Run Code Online (Sandbox Code Playgroud) 给定一个向量v <- c(1, 10, 22)和一个常数自然数,说明c <- 3如何v在一个大小的窗口中用整数展开c.所以向量将变为w(即1向每边扩展三个整数,整数-2,-1,0,1,2,3,4):
> w
[1] -2 -1 0 1 2 3 4 7 8 9 10 11 12 13 19 20 21 22 23 24 25
Run Code Online (Sandbox Code Playgroud) 是否可以提供逻辑(或算术)运算符作为 R 函数的参数。检查这个共享主题的SO问题。
f1 <- function(a, b) a>b
Run Code Online (Sandbox Code Playgroud)
然后
> f1(1,2)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我如何实现允许我更改功能测试的运算符,例如
f2 <- function(a, b, operator = c('<', '>', '==')) { ... }
Run Code Online (Sandbox Code Playgroud)
那我愿意
> f2(1, 2, '<')
[1] TRUE
Run Code Online (Sandbox Code Playgroud)