r - Combinar dos filas mientras se mantienen los datos iniciales

CorePress2024-01-25  10

Estoy luchando por combinar dos marcos de datos; ambos constan de una sola columna, aunque con diferentes longitudes.

Mi primer marco de datos, llamado 'FamilyID' tiene este aspecto:

FamilyID <- structure(list(Family_No = c(1034, 1056, 1064, 1091, 1101, 1101, 
11, 113, 113, 1133, 1133, 115, 116)), row.names = c(NA, -13L), class = c("tbl_df", 
"tbl", "data.frame"))

Mi segundo marco de datos, llamado 'FID', tiene este aspecto:

FID <- structure(list(Family_No = c(1034, 1034, 1056, 1056, 1064, 1064, 
1091, 1091, 1101, 1101, 11, 11, 113, 113)), row.names = c(NA, 
-14L), class = c("tbl_df", "tbl", "data.frame"))

Como puedes ver, son muy similares, el segundo es simplemente un duplicado del primero, pero ahora necesito combinarlos en una columna pero MANTENER todos los valores iniciales, de modo que tenga 3 o 4 de cada valor individual (por ejemplo, para el primer valor 1034, tengo uno de ellos en el primer marco de datos y dos en el segundo marco de datos, por lo que finalmente quiero tres de ellos en el marco de datos final). Sé que con la combinación se eliminarán los duplicados, pero necesito conservar todos los valores. Alguien me puede ayudarcon eso?

Utilice rbind. Si los nombres de columna son diferentes, úselo con setNames

AnilGoyal

28/03/2021 a las 10:04

¿No es esto un simple enlace? rbind(ID de familia, FID)

- Ronak Shah

28/03/2021 a las 13:47



------------------------------------

Puedes utilizar esta línea de código:

new_df <- data.frame(Family_No = cbind(c(FamilyID$Family_No, FID$Family_No)))

datos:

# dataframe 1
FamilyID <- structure(list(Family_No = c(1034, 1056, 1064, 1091, 1101, 1101, 
11, 113, 113, 1133, 1133, 115, 116)), row.names = c(NA, -13L), class = c("tbl_df", 
"tbl", "data.frame"))

# dataframe 2
FID <- structure(list(Family_No = c(1034, 1034, 1056, 1056, 1064, 1064, 
1091, 1091, 1101, 1101, 11, 11, 113, 113)), row.names = c(NA, 
-14L), class = c("tbl_df", "tbl", "data.frame"))

Salida:

> new_df
   Family_No
1       1034
2       1056
3       1064
4       1091
5       1101
6       1101
7         11
8        113
9        113
10      1133
11      1133
12       115
13       116
14      1034
15      1034
16      1056
17      1056
18      1064
19      1064
20      1091
21      1091
22      1101
23      1101
24        11
25        11
26       113
27       113

2

¡Esto funcionó! Tengo mi salida que se parece a la tuya. ¿Hay alguna manera de reorganizar mis datos para que los valores coincidentes se alineen entre sí? En última instancia, necesito que mis datos (esta columna) me gusten así: 1034 1034 1034 1056 1056 1056 1064 1064 1064 1091 1091 1091 1101 1101 1101 1101, etc.

Linda

29 de marzo de 2021 a las 1:45

Puedes ordenar con sort(new_df[,1], decreciente = TRUE). Esto ordena la columna en orden decreciente.

- TarJae

30 de marzo de 2021 a las 6:46



------------------------------------

También puede colocar los conjuntos de datos (con una sola columna) en una lista y eliminarlos para crear un vector, luego ajustarlos con data.frame

data.frame(Family_No = unlist(list(FamilyID, FID)))

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare