R:通过for循环迭代打印多个表
R: Iterate through a for loop to print multiple tables
在房价预测数据集中,大约有80个变量和1459个obs。
为了更好地理解数据,我分离了 'char' 类型的变量。
char_variables = sapply(property_train, is.character)
char_names = names(property_train[,char_variables])
char_names
有 42 个变量是 char 数据类型。
我想找到每个变量中的观察次数。
简单的代码是:
table(property_train$Zoning_Class)
Commer FVR RHD RLD RMD
10 65 16 1150 218
但是对 42 个变量重复相同的操作将是一项乏味的任务。
我尝试打印所有表格的 for 循环显示错误。
for (val in char_names){
print(table(property_train[[val]]))
}
Abnorml AdjLand Alloca Family Normal Partial
101 4 12 20 1197 125
有没有办法通过数据框迭代 char_names 以打印所有 42 个表。
str(property_train)
'data.frame': 1459 obs. of 81 variables:
$ Id : int 1 2 3 4 5 6 7 8 9 10 ...
$ Building_Class : int 60 20 60 70 60 50 20 60 50 190 ...
$ Zoning_Class : chr "RLD" "RLD" "RLD" "RLD" ...
$ Lot_Extent : int 65 80 68 60 84 85 75 NA 51 50 ...
$ Lot_Size : int 8450 9600 11250 9550 14260 14115 10084 10382..
$ Road_Type : chr "Paved" "Paved" "Paved" "Paved" ...
$ Lane_Type : chr NA NA NA NA ...
$ Property_Shape : chr "Reg" "Reg" "IR1" "IR1" ...
$ Land_Outline : chr "Lvl" "Lvl" "Lvl" "Lvl" ...
实际上,对我来说,您的代码不会出错(确保一起评估 for 循环中的所有行):
property_train <- data.frame(a = 1:10,
b = rep(c("A","B"),5),
c = LETTERS[1:10])
char_variables = sapply(property_train, is.character)
char_names = names(property_train[,char_variables])
char_names
table(property_train$b)
for (val in char_names){
print(table(property_train[val]))
}
您还可以使用 dplyr 和 tidyr 将所有字符列转换为长格式并计算所有列值组合,以更加用户友好的形式获得此结果:
library(dplyr)
library(tidyr)
property_train %>%
select(where(is.character)) %>%
pivot_longer(cols = everything(), names_to = "column") %>%
group_by(column, value) %>%
summarise(freq = n())
在房价预测数据集中,大约有80个变量和1459个obs。
为了更好地理解数据,我分离了 'char' 类型的变量。
char_variables = sapply(property_train, is.character)
char_names = names(property_train[,char_variables])
char_names
有 42 个变量是 char 数据类型。
我想找到每个变量中的观察次数。
简单的代码是:
table(property_train$Zoning_Class)
Commer FVR RHD RLD RMD
10 65 16 1150 218
但是对 42 个变量重复相同的操作将是一项乏味的任务。
我尝试打印所有表格的 for 循环显示错误。
for (val in char_names){
print(table(property_train[[val]]))
}
Abnorml AdjLand Alloca Family Normal Partial
101 4 12 20 1197 125
有没有办法通过数据框迭代 char_names 以打印所有 42 个表。
str(property_train)
'data.frame': 1459 obs. of 81 variables:
$ Id : int 1 2 3 4 5 6 7 8 9 10 ...
$ Building_Class : int 60 20 60 70 60 50 20 60 50 190 ...
$ Zoning_Class : chr "RLD" "RLD" "RLD" "RLD" ...
$ Lot_Extent : int 65 80 68 60 84 85 75 NA 51 50 ...
$ Lot_Size : int 8450 9600 11250 9550 14260 14115 10084 10382..
$ Road_Type : chr "Paved" "Paved" "Paved" "Paved" ...
$ Lane_Type : chr NA NA NA NA ...
$ Property_Shape : chr "Reg" "Reg" "IR1" "IR1" ...
$ Land_Outline : chr "Lvl" "Lvl" "Lvl" "Lvl" ...
实际上,对我来说,您的代码不会出错(确保一起评估 for 循环中的所有行):
property_train <- data.frame(a = 1:10,
b = rep(c("A","B"),5),
c = LETTERS[1:10])
char_variables = sapply(property_train, is.character)
char_names = names(property_train[,char_variables])
char_names
table(property_train$b)
for (val in char_names){
print(table(property_train[val]))
}
您还可以使用 dplyr 和 tidyr 将所有字符列转换为长格式并计算所有列值组合,以更加用户友好的形式获得此结果:
library(dplyr)
library(tidyr)
property_train %>%
select(where(is.character)) %>%
pivot_longer(cols = everything(), names_to = "column") %>%
group_by(column, value) %>%
summarise(freq = n())