在这些数据中,每个人在第4-6列中给出了3个项目中的每个项目。
> Sample.Score
V1 V2 V3 V4 V5 V6
1 A B C 45 78 39
2 E F G 12 42 93
3 E H B 23 85 35
4 H C F 23 12 64
如何将其转换为2列,其中包含所有可能项目的分数,例如
> Sample.Score2
V1 V2
1 A 45
2 B 78
3 C 39
4 E 12
有重复的项目,但我不想先把它们总结一下。
答案 0 :(得分:1)
我们可以对数据集进行子集化,转置它,然后使用vector
转换为c
以创建新数据集的列
data.frame(V1 = c(t(df[1:3])), V2 = c(t(df[4:6])))
# V1 V2
#1 A 45
#2 B 78
#3 C 39
#4 E 12
#5 F 42
#6 G 93
#7 E 23
#8 H 85
#9 B 35
#10 H 23
#11 C 12
#12 F 64
答案 1 :(得分:0)
在下文中,我只是使用if mode == tf.estimator.ModeKeys.EVAL:
return tf.estimator.EstimatorSpec(mode=mode, loss=loss,
eval_metric_ops={"accuracy": tf.metrics.mean(my_tensor)})
两次。尽管字母按列顺序排列(与示例输出不同),但字母在同一行中具有正确的值。
lapply
使用的数据
data.frame(V1 = unlist(lapply(df[, 1:3], cbind)),
V2 = unlist(lapply(df[, 4:6], cbind)))
# V1 V2
# V11 A 45
# V12 E 12
# V13 E 23
# V14 H 23
# V21 B 78
# V22 F 42
# V23 H 85
# V24 C 12
# V31 C 39
# V32 G 93
# V33 B 35
# V34 F 64
答案 2 :(得分:0)
以下是几个选项,所有选项都有不同的从宽数据到长数据的方式。每次,您需要执行两次操作,因为您将分数转换为长数据,并将字母转换为长数据。除此之外,您还需要如何编写代码。
首先使用dplyr
和tidyr
,您可以在其中使用gather
并在单个语句中管理数据。 select
允许您将名称更改为V1和V2。
library(tidyverse)
df_long_gather <- df %>%
gather(key = key1, value = letter, V1:V3) %>%
gather(key = key2, value = score, V4:V6) %>%
select(V1 = letter, V2 = score) %>%
arrange(V1)
head(df_long_gather)
#> # A tibble: 6 x 2
#> V1 V2
#> <chr> <int>
#> 1 A 45
#> 2 A 78
#> 3 A 39
#> 4 B 45
#> 5 B 23
#> 6 B 78
您还可以使用melt
中的reshape2
。您可以通过两个步骤(第一个版本)执行此操作,或者将一个调用嵌套在另一个内部以执行一个步骤(第二个版本)。您还可以使用%>%
管道在单个语句中同时使用melt
。
两个步骤:
library(reshape2)
melted1 <- melt(df, id.vars = c("V1", "V2", "V3"),
measure.vars = c("V4", "V5", "V6"), variable.name = "key1",
value.name = "score")
melted2 <- melt(melted1, measure.vars = c("V1", "V2", "V3"),
variable.name = "key2", value.name = "V1")
df_long_melt <- data.frame(V1 = melted2$V1, V2 = melted2$score)
head(df_long_melt)
#> V1 V2
#> 1 A 45
#> 2 E 12
#> 3 E 23
#> 4 H 23
#> 5 A 78
#> 6 E 42
一步:
df_long_melt2 <- melt(
melt(df, measure.vars = c("V1", "V2", "V3"), value.name = "key1"),
measure.vars = c("V4", "V5", "V6"), value.name = "key2")[, c(2, 4)]
names(df_long_melt2) <- c("V1", "V2")
head(df_long_melt2)
#> V1 V2
#> 1 A 45
#> 2 E 12
#> 3 E 23
#> 4 H 23
#> 5 B 45
#> 6 F 12