x <- seq(1:100)
y <- 30
Run Code Online (Sandbox Code Playgroud)
如果我想确定x> y的累积和的位置
which.max(cumsum(x) >= y)
[1] 9 #
Run Code Online (Sandbox Code Playgroud)
相反,如果y是一个向量,即我想为y的每个元素返回x的位置
y <- c(30, 60, 80, 90)
which.max(cumsum(x) >= y)
[1] 9
Run Code Online (Sandbox Code Playgroud)
为什么不重新调整位置向量?
它需要(在我的MBP上使用2.9 GHz Intel Core i7和16 GB内存)超过20秒才能获得40,000 x 1,000矩阵的交叉产品:
> system.time(a <- crossprod(matrix(pi,40000,1000)))
user system elapsed
23.808 0.139 24.001
Run Code Online (Sandbox Code Playgroud)
有没有办法让它更快?谢谢你的帮助.
我有list2个或更多dataframes:
d <- data.frame(x=1:3, y=letters[1:3])
f <- data.frame(x=11:13, y=letters[11:13])
df <- list(d, f)
Run Code Online (Sandbox Code Playgroud)
为了保存它们.csv,我使用以下语法:
filenames = paste0('C:/Output_', names(df), '.csv')
Map(write.csv, df, filenames)
Run Code Online (Sandbox Code Playgroud)
但是我想添加一些字符串来获取特定的格式,例如:
quote = FALSE, row.names = FALSE, sep = "\t", na = "", col.names = FALSE
Run Code Online (Sandbox Code Playgroud)
问题是我不确定在哪里添加该语法.无论我在哪里尝试,我都会warning说我的语法被忽略了.
> Warning messages:
1: In (function (...) : attempt to set 'col.names' ignored
2: In (function (...) : attempt to set 'sep' ignored
3: In (function (...) : attempt to set 'col.names' ignored …Run Code Online (Sandbox Code Playgroud) 对R来说相当新.我想要做的是将矩阵中的所有数字都说成5,低于5.例如,如果矩阵是这样的:
1 3 2 5 7
3 8 3 6 2
Run Code Online (Sandbox Code Playgroud)
我想进入:
1 3 2 5 5
3 5 3 5 2
Run Code Online (Sandbox Code Playgroud)
我觉得必须有一种更有效的方法,而不是每次都用手做.任何帮助,将不胜感激.
如果我有此数据框:
df <- data.frame(time = seq(as.Date('2000-01-01'), length.out = 200, by = 'days'),
a = rnorm(200,8.4, 22), b=rnorm(200,8.4, 22), d= rnorm(200,8.4, 22),
e=rnorm(200,8.4, 22))
Run Code Online (Sandbox Code Playgroud)
子集化最简单的方法是什么,df以便每列的值都应大于百分之十,而小于百分之九十?
我可以使用循环来做到这一点,即:
for (i in names(df[,2:5])){
print(i)
column <- df[,c('time', i)]
q <- unname(quantile(column[,2], probs = c(0.1, 0.9))) # just for one column
column <- column[column[,2] > q[1] &column[,2] < q[2],]
df <- merge(df, column, by = 'time', all.x = T)
}
Run Code Online (Sandbox Code Playgroud)
但是有更简单更优雅的方式使用函数或包这样做dplyr。谢谢!
我有一个数据框,可以过滤,删除和添加一些列,然后我想使用管道(%>%)重命名所有列。
但是,我不明白如何获取当前的colnames向量(在内%>%)并将其替换为另一个向量?如果我不删除列,这似乎很简单,但是如何“更新” colnames管道链中的向量?
library(dplyr)
library(tidyr)
data("mtcars")
mtcars %>%
filter(disp < 200) %>%
dplyr::select(-c('mpg','cyl', "disp")) %>%
mutate(Type = 2) %>%
# rename_at(vars(names(df), # how to rename the columns???
# function(x) paste(names(df), "new", sep = "_"))) %>%
head(2)
Run Code Online (Sandbox Code Playgroud)
我得到的是:
hp drat wt qsec vs am gear carb Type
1 110 3.9 2.620 16.46 0 1 4 4 2
2 110 3.9 2.875 17.02 0 1 4 4 2
Run Code Online (Sandbox Code Playgroud)
我期望什么(更改姓氏)
hp_new drat_new wt_new qsec_new vs_new am_new gear_new carb_new …Run Code Online (Sandbox Code Playgroud) 我在R中相当多地使用了Any和All函数,但是我想要一些灵活性。是否有任何函数可以告诉我一定百分比的值是对还是假?
df
x
1 5
2 5
3 5
4 4
5 3
6 5
7 5
8 5
9 5
10 5
all(df$x==5)
[1] FALSE
any(df$x==5)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
所需的输出
伪码
60% of df == 5
TRUE
90% of df == 5
FALSE
Run Code Online (Sandbox Code Playgroud) 我有一个包含很多行和列的大型数据框。在一列中有字符,其中一些只出现一次,另一些则出现多次。我现在想分离整个数据框,这样我最终会得到两个数据框,一个是所有行的字符在这一列中重复,另一个是所有行的字符只出现一次. 例如:
One = c(1,2,3,4,5,6,7,8,9,10)
Two = c(4,5,3,6,2,7,1,8,1,9)
Three = c("a", "b", "c", "d","d","e","f","e","g","c")
df <- data.frame(One, Two, Three)
> df
One Two Three
1 1 4 a
2 2 5 b
3 3 3 c
4 4 6 d
5 5 2 d
6 6 7 e
7 7 1 f
8 8 8 e
9 9 1 g
10 10 9 c
Run Code Online (Sandbox Code Playgroud)
我希望有两个数据框,比如
> dfSingle
One Two Three
1 1 4 a
2 2 5 b
7 7 …Run Code Online (Sandbox Code Playgroud) 我想在我定义的函数中传递和使用数据框。但是我失败了。我想知道如何在R中传递和使用数据帧。
我使用的代码如下:
# create example data
testData <- data.frame(man = c(9, 8, 3, 4, 8),
woman = c(5, 4, 7, 1, 1),
love = c(1, 2, 3, 4, 5))
# define the function
polynomial <- function(iv1, iv2, dv, dataset){
model <- lm(dv ~ iv1 + iv2 + I(iv1^2) + I(iv1 * iv2) + I(iv2^2), data = dataset)
return(summary(model))
}
# use the function
polynomial(iv1 = man,
iv2 = woman,
dv = love,
dataset = testData)
Run Code Online (Sandbox Code Playgroud)
但是我收到了此错误消息- Error in eval(predvars, data, …
我有一个问题。
向量 A 是查询,向量 B 是参考。
我想看看 A 的哪个值最接近 B 值之一。
两个向量都是有序的。
输入
A = c(1, 1.2, 4, 8, 9, 10, 30)
B = c(0.1, 3.9)
Run Code Online (Sandbox Code Playgroud)
输出
min_diff_value = 0.1
min_value_A = 4
min_value_B = 3.9 (optionnal)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有技巧可以在没有耗时循环的情况下执行此操作?
谢谢你。