Kurz gesagt, möchte ich den umgekehrten Prozess von model.matrix()
machen. Ich habe die folgenden Daten aus einer Umfrage erhalten.R - Mehrere Zeichenspalten finden und kombinieren
Frage 1: eine von 'Cat' holen, 'Dog' oder 'Sheep'
Frage 2: Wählen Sie eine Zufallszahl
Frage 3:
Der aus 'Big' oder 'Small' wählen Ergebnisse werden in einem Datenrahmen in der folgenden Art und Weise setzen:
id ans_1 ans_2 ans_3 num size_1 size_2
1 Cat 0 0 0.76 0 Small
2 0 Dog 0 0.44 0 Small
3 0 0 Sheep 0.52 Big 0
4 0 0 Sheep 0.52 Big 0
5 0 Dog 0 0.59 0 Small
6 Cat 0 0 0.97 0 Small
7 0 Dog 0 0.5 0 Small
8 0 Dog 0 0.19 0 Small
9 0 0 Sheep 0.01 Big 0
10 Cat 0 0 0.24 0 Small
Was ich die Antworten jeder Frage, in einer einzigen Spalte tun will zu kombinieren ist. In diesem Beispiel stammen ans_1, ans_2 und ans_3 aus derselben Frage und Größe_1 und Größe_2. Kombiniert sie, würden die Ergebnisse wie aussehen:
id ans num size
1 Cat 0.76 Small
2 Dog 0.44 Small
3 Sheep 0.52 Big
4 Sheep 0.52 Big
5 Dog 0.59 Small
6 Cat 0.97 Small
7 Dog 0.5 Small
8 Dog 0.19 Small
9 Sheep 0.01 Big
10 Cat 0.24 Small
Ich habe mehrere Datensätze, von denen jeder etwa 100 Spalten enthält. Dies macht es zu viel Arbeit von Hand zu tun. Beachten Sie, dass es auch Spalten wie "num" gibt, die für sich stehen. Die Antworten auf die gleiche Frage sind immer gleich nebeneinander wie in diesem Beispiel.
Vielen Dank!
Daten
id = 1:10
ans_1 = c('Cat', 0, 0, 0, 0, 'Cat', 0, 0, 0, 'Cat')
ans_2 = c(0, 'Dog', 0, 0, 'Dog', 0, 'Dog', 'Dog', 0, 0)
ans_3 = c(0, 0, 'Sheep', 'Sheep', 0, 0, 0, 0, 'Sheep', 0)
num = round(runif(10),2)
size_1 = c(0, 0, 'Big', 'Big', 0, 0, 0, 0, 'Big', 0)
size_2 = c('Small', 'Small', 0, 0, 'Small', 'Small', 'Small', 'Small', 0,
'Small')
data <- noquote(cbind(id, ans_1, ans_2, ans_3, num, size_1, size_2))
'cbind' kehrt eine Matrix, keine Daten .Rahmen. Verwenden Sie einfach "data.frame". – alistaire
Eine Option, um es zu bereinigen: 'Bibliothek (Tidyverse); Daten%>% unclass()%>% as_data_frame()%>% muate_all (na_if, '0')%>% type_convert()%>% muate (ans = coalesce (ans_1, ans_2, ans_3), size = coalesce (size_1, size_2))%>% select (-matches ('_ \\ d + $')) ' – alistaire