我可以在 运行 R 中的 `for` 循环时将列名添加到变量吗?
Can I add column names to a variable while I run a `for` loop in R?
我在 R 中进行了一项练习,要求我找到一些变量的茎叶图。例如,此过程的第一次迭代将是:
> with(data = Commercial_Properties, stem(x = Op_Expense_Tax))
The decimal point is at the |
2 | 0
4 | 080003358
6 | 012613
8 | 00001223456001555689
10 | 013344566677778123344666668
12 | 00011115777889002
14 | 6
在此之后,我将不得不为更多的变量重复执行此操作。因此,在我改进的道路上,我记得我的一位精通编程的朋友提到,如果您重复执行相同的任务,那么它需要完成某种 for
循环。
因此我尝试这样做:
for (i in 2:5){
stem_colnames(Commercial_Properties[i]) = with(data = Commercial_Properties, stem(x = unlist(Commercial_Properties[,i])))
}
我想让代码做的是从我的数据框中提取列名,将其附加到 stem_
以创建相应变量的名称,然后生成相应的茎叶图。我很可能可以手动执行此操作,但我想知道是否可以使该过程自动化?我是不是太雄心勃勃了,希望我也能迭代地命名我的变量?
要重现示例,以下是 dput
输出。
dput(head(Commercial_Properties, 5))
structure(list(Rental_Rates = c(13.5, 12, 10.5, 15, 14), Age = c(1,
14, 16, 4, 11), Op_Expense_Tax = c(5.02, 8.19, 3, 10.7, 8.97),
Vacancy_Rate = c(0.14, 0.27, 0, 0.05, 0.07), Total_Sq_Ft = c(123000,
104079, 39998, 57112, 60000)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
编辑:使用的包:tidyverse
、car
考虑使用 cat
for (i in 2:5){cat(names(Commercial_Properties)[i], "\n")
stem(Commercial_Properties[[i]])
}
-输出
Age
The decimal point is 1 digit(s) to the right of the |
0 | 14
0 |
1 | 14
1 | 6
Op_Expense_Tax
The decimal point is at the |
2 | 0
4 | 0
6 |
8 | 20
10 | 7
Vacancy_Rate
The decimal point is 1 digit(s) to the left of the |
0 | 057
1 | 4
2 | 7
Total_Sq_Ft
The decimal point is 4 digit(s) to the right of the |
2 |
4 | 07
6 | 0
8 |
10 | 4
12 | 3
或者如果我们需要一个函数
f1 <- function(dat, colind) {
for(i in colind) {
cat(names(dat)[i], "\n")
stem(dat[[i]])
}
}
f1(Commercial_Properties, 2:5)
或者可以用 iwalk
来完成
library(purrr)
iwalk(Commercial_Properties, ~ {cat(.y, "\n"); stem(.x)})
我在 R 中进行了一项练习,要求我找到一些变量的茎叶图。例如,此过程的第一次迭代将是:
> with(data = Commercial_Properties, stem(x = Op_Expense_Tax))
The decimal point is at the |
2 | 0
4 | 080003358
6 | 012613
8 | 00001223456001555689
10 | 013344566677778123344666668
12 | 00011115777889002
14 | 6
在此之后,我将不得不为更多的变量重复执行此操作。因此,在我改进的道路上,我记得我的一位精通编程的朋友提到,如果您重复执行相同的任务,那么它需要完成某种 for
循环。
因此我尝试这样做:
for (i in 2:5){
stem_colnames(Commercial_Properties[i]) = with(data = Commercial_Properties, stem(x = unlist(Commercial_Properties[,i])))
}
我想让代码做的是从我的数据框中提取列名,将其附加到 stem_
以创建相应变量的名称,然后生成相应的茎叶图。我很可能可以手动执行此操作,但我想知道是否可以使该过程自动化?我是不是太雄心勃勃了,希望我也能迭代地命名我的变量?
要重现示例,以下是 dput
输出。
dput(head(Commercial_Properties, 5))
structure(list(Rental_Rates = c(13.5, 12, 10.5, 15, 14), Age = c(1,
14, 16, 4, 11), Op_Expense_Tax = c(5.02, 8.19, 3, 10.7, 8.97),
Vacancy_Rate = c(0.14, 0.27, 0, 0.05, 0.07), Total_Sq_Ft = c(123000,
104079, 39998, 57112, 60000)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
编辑:使用的包:tidyverse
、car
考虑使用 cat
for (i in 2:5){cat(names(Commercial_Properties)[i], "\n")
stem(Commercial_Properties[[i]])
}
-输出
Age
The decimal point is 1 digit(s) to the right of the |
0 | 14
0 |
1 | 14
1 | 6
Op_Expense_Tax
The decimal point is at the |
2 | 0
4 | 0
6 |
8 | 20
10 | 7
Vacancy_Rate
The decimal point is 1 digit(s) to the left of the |
0 | 057
1 | 4
2 | 7
Total_Sq_Ft
The decimal point is 4 digit(s) to the right of the |
2 |
4 | 07
6 | 0
8 |
10 | 4
12 | 3
或者如果我们需要一个函数
f1 <- function(dat, colind) {
for(i in colind) {
cat(names(dat)[i], "\n")
stem(dat[[i]])
}
}
f1(Commercial_Properties, 2:5)
或者可以用 iwalk
library(purrr)
iwalk(Commercial_Properties, ~ {cat(.y, "\n"); stem(.x)})