我正在尝试从R中的2D数据帧生成3D数组,并且确实可以使用一些帮助。到目前为止,我还没有从以前发布的类似问题中找到解决此问题的方法。
我的输入数据可在此处找到:https://www.dropbox.com/s/7f8td34mpzgpvgh/example_data.csv?dl=0,它们类似于以下基本结构:我有14个站点(即function fix(v, left, right) {
return (v < 0 ? '-' : '+') + Math.abs(v).toFixed(right).padStart(left + right + 1, '0');
}
console.log(fix(32.91, 3, 4)); // +032.9100
console.log(fix(-2.1, 3, 4)); // -002.1000
console.log(fix(0.32546, 3, 4)); // +000.3255
),每个站点有6个重复项(即Field
),其中调查中存在32个主题的子集(即种类代码:Replicate
,AMGO
等)。
输入数据的子集如下:
BASW
我想将这些输入数据重新格式化为类似于3D数组(即14个站点x 6个重复x 32个主题),如下面的example_data[1:5, 1:5]
Field Replicate AMGO BASW BHCO
1 Brinkman 1 2 0 0
72 Brinkman 2 10 0 0
190 Brinkman 3 6 0 0
283 Brinkman 4 0 0 0
342 Brinkman 5 2 1 0
物种所示:
AMGO
请注意,在解决方案中,当在调查期间实际遇到, , = AMGO
1 2 3 4 5 6
Brinkman 0 0 0 0 0 0
Clara 0 0 0 0 0 0
Esckelson 0 0 0 0 0 0
GarnerEast 0 0 0 0 0 0
GarnerWest 0 0 0 0 0 0
KHess 0 0 0 0 0 0
Lounsbury 0 0 0 0 0 0
McCallum 0 0 0 0 0 0
Pomeroy 0 0 0 0 0 0
Sattelberg 0 0 0 0 0 0
THess 0 0 0 0 0 0
Turner 0 0 0 0 0 0
VollmarEast 0 0 0 0 0 0
VollmarWest 0 0 0 0 0 0
...
(和其他物种)时,上面的许多零可能会被非零计数取代。
请让我知道是否需要澄清,并在此先感谢!
答案 0 :(得分:1)
这是一个使用基数R中的reshape()
函数的解决方案。我正在将该函数应用于每个主题列,并创建了一个经过整形的数据帧列表。
df <- read.csv("C:\\Users\\Shrivatav\\Downloads\\example_data.csv", encoding = "UTF-8")
# Extract subject columns
list.of.cols <- colnames(df)[3:34]
# Function for reshaping
func.for.reshaping <- function(column){
# Subset the data, keep only Field, replicate and the column input in the
# function
to.keep <- c("Field", "Replicate", column)
subset.df <- df[to.keep]
# reshape from long to wide
reshaped.df <- reshape(subset.df, idvar = "Field", timevar = "Replicate", direction = "wide")
return(reshaped.df)
}
# Apply the function over all subject columns, reulting
# in a list of dataframes
list.of.reshaped.dfs <- lapply(list.of.cols, func.for.reshaping)
# Name the list for easy access
names(list.of.reshaped.dfs) <- list.of.cols
您可以访问列表的元素,例如:list.of.reshaped.dfs$AMGO
等。