小编Sot*_*tos的帖子

如何在测试集上使用 PCA(代码)

我正在尝试使用 PCA 来选择一些 K 主要组件来使用。

我知道不应在测试集上重新运行 PCA,而应使用在对训练集建模时找到的特征向量 \ PC。

我有 2 个 CSV - 一个是训练集,

另一个测试集(每条记录没有标签)

训练集上的 PCA 过程使用以下代码完成:

# Load CSV file
train_set.init_data <- read.csv("D:\\train.csv", header = TRUE)

# Remove identifier and respone variables (ID, and SalePrice):
train_set.vars <- subset(train_set.init_data, select = -c(Id, SalePrice))

# Convert catergorical variables into numerical using dummy variables:
library(dummies)
train_set.vars_dummy <- dummy.data.frame(train_set.vars, sep = ".")

# Principal Component Analysis:
train_set.prin_comp <- prcomp(train_set.vars_dummy, scale. = T)

# Choose some K components
????

# Run …
Run Code Online (Sandbox Code Playgroud)

r pca

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

如何显示每行的最大值?

我想知道如何告诉R只显示每行中的最大值.

例如,我想要这张表:

> data<- randu
> data[1:10,]


         x        y        z
1  0.000031 0.000183 0.000824
2  0.044495 0.155732 0.533939
3  0.822440 0.873416 0.838542
4  0.322291 0.648545 0.990648
5  0.393595 0.826873 0.418881
6  0.309097 0.926590 0.777664
7  0.826368 0.308540 0.413932
8  0.729424 0.741526 0.884338
9  0.317649 0.393468 0.501968
10 0.599793 0.846041 0.678107
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

          x        y        z
1                    0.000824
2                    0.533939
3           0.873416 
4                    0.990648
5           0.826873 
6           0.926590 
7  0.826368 
8                    0.884338
9                    0.501968
10          0.846041 
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

返回使用.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 ×10

dplyr ×3

subset ×2

any ×1

cumsum ×1

dataframe ×1

duplicates ×1

function ×1

matrix ×1

pca ×1

which ×1