小编Sot*_*tos的帖子

返回使用.max的位置向量

  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)

为什么不重新调整位置向量?

r which cumsum

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

如何使crossprod更快

它需要(在我的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)

有没有办法让它更快?谢谢你的帮助.

r

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

如何在使用Map()时指定.csv分隔符

我有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

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

切断矩阵中"n"以下的所有数字

对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)

我觉得必须有一种更有效的方法,而不是每次都用手做.任何帮助,将不胜感激.

r matrix

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

根据分位数对数据框进行分组

如果我有此数据框:

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。谢谢!

r function subset dplyr

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

在链接管道中删除某些数据框列后,重命名所有数据框列

我有一个数据框,可以过滤,删除和添加一些列,然后我想使用管道(%>%)重命名所有列。

但是,我不明白如何获取当前的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 dplyr

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

如何检查某些值是否为真

我在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)

r any

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

取决于一列重复的单独数据框

我有一个包含很多行和列的大型数据框。在一列中有字符,其中一些只出现一次,另一些则出现多次。我现在想分离整个数据框,这样我最终会得到两个数据框,一个是所有行的字符在这一列中重复,另一个是所有行的字符只出现一次. 例如:

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 subset duplicates dataframe

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

如何传递和使用数据框到函数

我想在我定义的函数中传递和使用数据框。但是我失败了。我想知道如何在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, …

r function dataframe

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

通过逐元素向量比较找到最小差异和对应值的最佳方法是什么?

我有一个问题。
向量 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)

我想知道是否有技巧可以在没有耗时循环的情况下执行此操作?
谢谢你。

r vector minimum difference elementwise-operations

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