Dammit. Forgot all about that. Yes, that is the way to do it: with(dat, ave(Value, Group, FUN = \(x)min(x, na.rm = TRUE)))
Thanks for resolving my nonsense. -- Bert On Thu, Aug 29, 2024 at 2:58 PM Jeff Newmiller via R-help < r-help@r-project.org> wrote: > Use the ave function. > > On August 29, 2024 2:29:16 PM PDT, Bert Gunter <bgunter.4...@gmail.com> > wrote: > >Petr et.al: > > > >I think using merge is a very nice idea! (note that the email omitted the > >last rows of the result, though your code of course produced them) > > > >The only minor problem is that the order of the rows in the result is > >changed from the original. If the OP needs to preserve the original > >ordering, that can be easily done. Here is a complete implementation of > >your idea (I think). > > > >## assume that dat is a data frame with the first two columns as in the > >OP's post, i.e. the first column is the Value with NA's and the second is > >the Group > > > > spl <- dat |> nrow() |> seq_len() |> split(dat[[2]]) |> unlist() ## for > >reordering > > dat[spl, 1:2] <- > > dat[, 1:2] |> > > na.omit() |> ## remove rows with NA's > > unique() |> ## remove duplicate rows > > merge(dat[, 1:2], by.x=2, by.y=2) |> _[, 2:1] ## and now merge() > > > > Note the final reordering of the first two columns because of the way > >merge() works. > >I suspect there may be a slicker way to do this using unsplit(), but I > >could not figure out how > > > >The result is: > >> dat > > Value Group > >1 6 8 > >2 9 5 > >3 2 1 > >4 5 6 > >5 2 7 > >6 7 2 > >7 4 4 > >8 2 7 > >9 2 7 > >10 10 3 > >11 7 2 > >12 4 4 > >13 5 6 > >14 9 5 > >15 9 5 > >16 5 6 > >17 10 3 > >18 7 2 > >19 2 1 > >20 2 7 > >21 7 2 > >22 6 8 > >23 4 4 > >24 9 5 > >25 5 6 > >26 2 1 > >27 4 4 > >28 6 8 > >29 10 3 > >30 10 3 > >31 6 8 > >32 2 1 > > > >Cheers, > >Bert > > > > > > > > > >On Wed, Aug 28, 2024 at 10:53 PM Petr Pikal <petr....@gmail.com> wrote: > > > >> Hallo Francesca > >> > >> If you had an object with correct setting, something like template > >> > >> > dput(res) > >> structure(list(V1 = c("1", "2", "3", "4", "5", "6", "7", "8"), > >> V2 = c(2, 7, 10, 4, 9, 5, 2, 6)), class = "data.frame", row.names = > >> c("1", > >> "2", "3", "4", "5", "6", "7", "8")) > >> > >> you could merge it with your object where some values are missing > >> > >> > dput(daf) > >> structure(list(X1 = c(6L, 9L, NA, 5L, NA, NA, 4L, 2L, 2L, NA, > >> NA, NA, 5L, 9L, NA, NA, 10L, 7L, 2L, NA, 7L, NA, NA, NA, NA, > >> 2L, 4L, 6L, 10L, NA, NA, NA), X2 = c(8L, 5L, 1L, 6L, 7L, 2L, > >> 4L, 7L, 7L, 3L, 2L, 4L, 6L, 5L, 5L, 6L, 3L, 2L, 1L, 7L, 2L, 8L, > >> 4L, 5L, 6L, 1L, 4L, 8L, 3L, 3L, 8L, 1L)), class = "data.frame", > row.names = > >> c(NA, > >> -32L)) > >> > >> > merge(daf, res, by.x="X2", by.y="V1") > >> X2 X1 V2 > >> 1 1 NA 2 > >> 2 1 NA 2 > >> 3 1 2 2 > >> 4 1 2 2 > >> 5 2 NA 7 > >> 6 2 NA 7 > >> 7 2 7 7 > >> 8 2 7 7 > >> 9 3 10 10 > >> 10 3 NA 10 > >> 11 3 10 10 > >> 12 3 NA 10 > >> 13 4 4 4 > >> 14 4 NA 4 > >> 15 4 4 4 > >> 16 4 NA 4 > >> 17 5 9 9 > >> 18 5 NA 9 > >> 19 5 NA 9 > >> > >> Cheers. > >> Petr > >> > >> > >> > >> > >> st 28. 8. 2024 v 0:45 odesílatel Francesca PANCOTTO via R-help < > >> r-help@r-project.org> napsal: > >> > >> > Dear Contributors, > >> > I have a problem with a database composed of many individuals for many > >> > periods, for which I need to perform a manipulation of data as > follows. > >> > Here I report the procedure I need to do for the first 32 > observations of > >> > the first period. > >> > > >> > > >> > cbind(VB1d[,1],s1id[,1]) > >> > [,1] [,2] > >> > [1,] 6 8 > >> > [2,] 9 5 > >> > [3,] NA 1 > >> > [4,] 5 6 > >> > [5,] NA 7 > >> > [6,] NA 2 > >> > [7,] 4 4 > >> > [8,] 2 7 > >> > [9,] 2 7 > >> > [10,] NA 3 > >> > [11,] NA 2 > >> > [12,] NA 4 > >> > [13,] 5 6 > >> > [14,] 9 5 > >> > [15,] NA 5 > >> > [16,] NA 6 > >> > [17,] 10 3 > >> > [18,] 7 2 > >> > [19,] 2 1 > >> > [20,] NA 7 > >> > [21,] 7 2 > >> > [22,] NA 8 > >> > [23,] NA 4 > >> > [24,] NA 5 > >> > [25,] NA 6 > >> > [26,] 2 1 > >> > [27,] 4 4 > >> > [28,] 6 8 > >> > [29,] 10 3 > >> > [30,] NA 3 > >> > [31,] NA 8 > >> > [32,] NA 1 > >> > > >> > > >> > In column s1id, I have numbers from 1 to 8, which are the id of 8 > groups > >> , > >> > randomly mixed in the larger group of 32. > >> > For each group, I want the value that is reported for only to group > >> > members, to all the four group members. > >> > > >> > For example, value 8 in first row , second column, is group 8. The > value > >> > for group 8 of the variable VB1d is 6. At row 28, again for s1id > equal to > >> > 8, I have 6. > >> > But in row 22, the value 8 of the second variable, reports a value NA. > >> > in each group is the same, only two values have the correct number, > the > >> > other two are NA. > >> > I need that each group, identified by the values of the variable S1id, > >> > correctly report the number of variable VB1d that is present for just > two > >> > group members. > >> > > >> > I hope my explanation is acceptable. > >> > The task appears complex to me right now, especially because I will > need > >> to > >> > multiply this procedure for x12x14 similar databases. > >> > > >> > Anyone has ever encountered a similar problem? > >> > Thanks in advance for any help provided. > >> > > >> > ---------------------------------- > >> > > >> > Francesca Pancotto > >> > > >> > Associate Professor Political Economy > >> > > >> > University of Modena, Largo Santa Eufemia, 19, Modena > >> > > >> > Office Phone: +39 0522 523264 > >> > > >> > Web: *https://sites.google.com/view/francescapancotto/home > >> > <https://sites.google.com/view/francescapancotto/home>* > >> > > >> > ---------------------------------- > >> > > >> > [[alternative HTML version deleted]] > >> > > >> > ______________________________________________ > >> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> > https://stat.ethz.ch/mailman/listinfo/r-help > >> > PLEASE do read the posting guide > >> > https://www.R-project.org/posting-guide.html > >> > and provide commented, minimal, self-contained, reproducible code. > >> > > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > >> https://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > >> > > > > [[alternative HTML version deleted]] > > > >______________________________________________ > >R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >https://stat.ethz.ch/mailman/listinfo/r-help > >PLEASE do read the posting guide > https://www.R-project.org/posting-guide.html > >and provide commented, minimal, self-contained, reproducible code. > > -- > Sent from my phone. Please excuse my brevity. > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide https://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.